簡體   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