我無法在Visual Studio 2013中爲64位平臺編譯介紹性的Lapack代碼。什麼,我試圖做總結:鏈接LAPACK,64位,Visual Studio 2013
- 獲取LAPACK並支持64位C++運行的軟件,我在Visual Studio 2013年寫
- 我用在給定方向相同按照使用預建庫(* .dll,* .lib & * .h)的方法,並引用我構建的庫中的指令。
Visual Studio的步驟我走:
- 我開始一個新項目 - 採摘的Visual C++空項目模板
- 在項目屬性中,我第一次去配置管理器,並創建一個新的x64的解決方案平臺(複製Win32設置)
- 然後,對於所有配置和所有平臺,我將鏈接器附加庫依賴關係指向我將預構建的* .lib文件放置到的位置。我也添加到鏈接器=>按照指示輸入libblas.lib和liblapack.lib庫。
- 注意1:我沒有添加任何Lapacke的東西,因爲我不相信我試圖運行的簡單示例程序需要這些東西(並且添加這些路徑在以前的嘗試中似乎沒有幫助)
- 注2:我知道我下載的庫只有64位 - 但我將這些項目屬性應用於'所有平臺'(意思是包括32位平臺)以演示某些內容,如下所示...
- 然後在Visual Studio中,我用www.cs.rochester.edu/~bh/cs400/using_lapack.html提供的代碼添加了一個C++源文件'source.cpp'。下面的代碼
#include < stdio.h>
extern "C" void dgesv_(const int *N, const int *nrhs, double *A, const int *lda, int *ipiv, double *b, const int *ldb, int *info);
extern "C" void dgels_(const char *trans, const int *M, const int *N, const int *nrhs, double *A, const int *lda, double *b, const int *ldb, double *work,
const int * lwork, int *info);
int main(void)
{
double A[9] = { 76, 27, 18, 25, 89, 60, 11, 51, 32 };
double b[3] = { 10, 7, 43 };
int N = 3;
int nrhs = 1;
int lda = 3;
int ipiv[3];
int ldb = 3;
int info;
dgesv_(&N, &nrhs, A, &lda, ipiv, b, &ldb, &info);
if (info == 0) /* succeed */
printf("The solution is %lf %lf %lf\n", b[0], b[1], b[2]);
else
fprintf(stderr, "dgesv_ fails %d\n", info);
return info;
}
- 然後我嘗試編譯這個程序(在Debug或Release配置) - 爲x64平臺並且得到錯誤:
error LNK2019: unresolved external symbol dgesv_ referenced in function main
這似乎表明預建的庫不包含這些功能。
- 非常奇怪的是,如果我將平臺更改爲'win32',項目編譯! (呵?)所以它爲32位平臺找到這些庫。 (順便說一句,如果我嘗試運行那裏產生的可執行文件,我得到一個錯誤,一個* .dll文件丟失 - 因爲我只下載了64位庫,這並不奇怪...)
此外,在代碼也dgesv_前添加下劃線似乎不工作 - 給我在編譯時錯誤:
fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'
這也與一些討論在icl.cs.utk.edu/lapack-跟蹤論壇/ viewtopic.php?F = 12 & T = 4260
同樣,這整個問題似乎在http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=12&t=4260和鄉親那裏追蹤的討論似乎表明,自行構建圖書館與CMake的是一個解決方案(我想這一點,但運行到問題的存在它沒有找到在MinGW的-W64庫正確的Fortran編譯器,我下載< =這可能適用於不同的職位!)。更重要的是,在該線程的帖子的最後,「管理員」表示,他們以前糾正任何問題,這些預建libaries,他們應該現在的工作。所以我必須做一些不正確的事,對嗎?有沒有人在我使用的工作流程中看到問題?