繁体   English   中英

带 wxWidgets 的犰狳:polyfit 无法链接

[英]Armadillo with wxWidgets: polyfit fails to link

我一直在使用 wxWidgets 制作一些 Armadillo 功能的可视化示例。 矩阵转置和 FFT 都运行良好,但是当我尝试进行简单的 polyfit 调用时,linker 失败并出现如下一系列错误:

> 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。

这是导致链接错误的代码。 它编译并链接查找 polyfit 行是否被注释掉。

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,所以它没有创建 armadillo.lib 文件。 我也尝试下载最新的 win64 OpenBLAS 库,但出现了同样的链接错误。

我尝试用今天下载的替换 2016 年的 libopenblas.lib 和 dll。 没变。 如果调用 polyfit function,它不会链接,但如果将其注释掉,则可以正常编译。

你会认为调用 Armadillo 函数的程序可以编译并运行,只要你告诉编译器包含的位置和 linker 库的位置。 这通常有效,但对于 polyfit 则无效。

解决方案是复制示例 Visual Studio 解决方案文件 example1_win64.sln 并重命名。 然后,打开该解决方案并将示例代码替换为您自己的代码,程序将编译并链接。

将该解决方案文件移动到您创建的目录中可能是个好主意,Visual Studio 会在该目录中保存其所有项目,C:\Users\your_name\source\repos

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM