在Qt中更改编译器时重新链接外部库

时间:2018-08-22 09:50:00

标签: c++ qt visual-c++ linker-errors armadillo

我知道这个错误已经得到很多解决,但是直到现在我仍无法解决我的项目。我正在做一个Qt应用程序,想用MSVC编译器而不是MinGW进行编译(原因是here)。

构建程序时,我会收到大量此类错误(只是摘录):

error: LNK2019: unresolved external symbol sdot_ referenced in function "double __cdecl arma::blas::dot<double>(unsigned int,double const *,double const *)" (??$dot@N@blas@arma@@YANIPEBN0@Z)
error: LNK2019: unresolved external symbol sgemv_ referenced in function "void __cdecl arma::blas::gemv<double>(char const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (??$gemv@N@blas@arma@@YAXPEBDPEBH1PEBN21212PEAN1@Z)

,此警告:LNK4272: library machine type 'x86' conflicts with target machine type 'x64'

This线程建议运行qmake并重新构建项目,但这没有任何改变。

herehere开始,如警告所示,我认为必须更改链接器的目标计算机。但是,我发现的所有内容都在Visual Studio中进行了解释。如何在Qt Creator中做到这一点?

如果有任何提示,我将非常感谢。

编辑:所以我的程序使用了犰狳类库,这就是问题的原因。更改编译器时,需要以新方式编译或链接此库(对吗?)。 blog post总结了两点问题(第二点是错误的原因):

  
      
  1. MSVC无法直接链接到dll->我们需要一个所谓的“导入库”。

  2.   
  3. 符号可见性:GCC / MinGW默认情况下导出所有符号,MSVC默认情况下不导出任何符号。

  4.   

因此,在使用MSVC时,对于MinGW,我必须链接导入库(.lib)而不是.dll。如何在QtCreator中做到这一点?

这是我第一次深入了解编译器和链接器,因此我非常乐意提供更正,建议和解决方案!

0 个答案:

没有答案