我知道这个错误已经得到很多解决,但是直到现在我仍无法解决我的项目。我正在做一个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并重新构建项目,但这没有任何改变。
从here和here开始,如警告所示,我认为必须更改链接器的目标计算机。但是,我发现的所有内容都在Visual Studio中进行了解释。如何在Qt Creator中做到这一点?
如果有任何提示,我将非常感谢。
编辑:所以我的程序使用了犰狳类库,这就是问题的原因。更改编译器时,需要以新方式编译或链接此库(对吗?)。 blog post总结了两点问题(第二点是错误的原因):
MSVC无法直接链接到dll->我们需要一个所谓的“导入库”。
符号可见性:GCC / MinGW默认情况下导出所有符号,MSVC默认情况下不导出任何符号。
因此,在使用MSVC时,对于MinGW,我必须链接导入库(.lib)而不是.dll。如何在QtCreator中做到这一点?
这是我第一次深入了解编译器和链接器,因此我非常乐意提供更正,建议和解决方案!