我想讓ARPACK
庫在VS2010
上運行。我想用ARPACK
++提供的C++包裝 ++(一些背景 - 我需要得到巨大矩陣的特徵值和特徵向量)。關於這個問題有一個非常好的教程here。鏈接到VS2010的ARPACK
繼 教程中,我已經成功地彙編mingw
使用g77
的Fortran代碼,描述我成功生成 的dll和lib。試圖將我的Visual Studio項目鏈接到庫時出現問題。
我試圖聯繫方式如下:
- 我做了一個簡單的VS2010 C++控制檯應用程序
- 我已經添加了含ARPACK ++庫文件夾到我的「額外包括:文件夾」
- 我添加的lib文件到‘附加依賴’
- 我加方含的lib文件到我的目錄‘附加庫目錄’
儘管這些設置,當我嘗試編譯這段簡短的測試代碼:
#include "stdafx.h"
#include "arrsnsym.h"
int _tmain(int argc, _TCHAR* argv[])
{
ARrcNonSymStdEig<float> prob(100, 4L);
printf("Bok!");
return 0;
}
我得到一個錯誤說:
>arpackcpp.obj : error LNK2001: unresolved external symbol scopy_
1>arpackcpp.obj : error LNK2001: unresolved external symbol snaupd_
1>arpackcpp.obj : error LNK2001: unresolved external symbol sneupd_
我不明白爲什麼鏈接器無法找到提到的方法。檢查 由dllwrap實用程序生成的.def文件確實提到所有這些功能 因此我相當確定它們應該可用。不過,我覺得我失去了一些明顯的東西。
UPDATE(得到它的工作!):
事實證明,我試圖切換 當在配置設置的x86的64位程序鏈接到32位庫,包括產生的DEF文件在配置屬性 - >鏈接器 - >輸入 - >附加定義文件,它適用於32位(但我需要64)。對我來說最終的解決方案是在Linux上使用MinGW和gfortran對Win64進行交叉編譯。這工作出人意料地好,併產生了一個DLL,我可以從VS中的64位C++應用程序鏈接。我想我現在應該去寫一個關於如何做到這一點的教程:)
問題是從64位程序鏈接到32位DLL。我確實得到它的工作(見編輯)。感謝您提供gfortran,它運行得非常好,我在使用Windows上生成的dll時完全沒有問題。 – Silentbit 2012-07-31 22:08:17
@ user1563071 - 如果你的工作有效,可隨時發佈自己的問題答案(並在你有能力時接受)。這樣,如果他們遇到同樣的問題並在谷歌搜索中找到這些答案,其他人將能夠看到對您有用的東西(非常顯着)。 – mgilson 2012-08-01 01:45:57