我一直在使用wxWidgets为Armadillo的一些函数制作可视化示例。矩阵转置和FFT都工作得很好,但是当我试图做一个简单的polyfit调用时,链接器失败了,出现了一系列错误,如:
> error LNK2019: unresolved external symbol sdot_ referenced in function "double __cdecl arma::blas::dot<double>(unsigned __int64,double const *,double const *)" (?? $dot@N@blas@arma@@YAN_KPEBN1@Z)
但是,如果我不使用wxWidgets显示结果,则完全相同的调用链接并运行得很好。我使用的是Windows 10和Visual Studio 2022。
下面是导致链接错误的代码。它编译并链接查找多边形行是否被注释掉。vector <double> xcoords = { 7,8,9,10,11,12,13,14,15,16,17 };
vector <double> ycoords = { 32,35,29,34,30,24,32,24,23,28,21 };
arma::vec x = arma::vec(xcoords);
arma::vec y = arma::vec(ycoords);
arma::vec p = arma::polyfit(x, y, 2);
当我安装Armadillo时,我运行Cmake。为了构建库,但是因为libopenblas.dll和.lib已经提供了,所以它没有创建一个犰狳。lib文件。我也尝试下载最新的win64 OpenBLAS库,但同样的链接错误发生。
我尝试替换libopenblas。Lib和DLL从2016年与今天下载的。没有变化。如果调用polyfit函数,则不会链接,但如果将其注释掉,则编译良好。
您可能会认为,如果只告诉编译器包含的位置和链接器库的位置,调用Armadillo函数的程序就会编译并运行。这通常有效,但对于polyfit则不然。
解决方案是复制示例Visual Studio解决方案文件example1_win64。SLN并重命名。然后,打开该解决方案并用您自己的代码替换示例代码,程序将编译并链接。
将该解决方案文件移动到您创建的Visual Studio保存其所有项目的目录中可能是个好主意,C:Usersyour_namesourcerepos