MPICH2安裝在C:\ Program Files \ MPICH2中。有兩個子目錄(感興趣的),其中包含.h文件的\include
,以及包含.lib文件的\lib
。MinGW鏈接器找不到MPICH2庫
附帶MPICH2有以下說明自述:
- 創建一個makefile
- 添加
–I...mpich2\include
- 添加
–L...mpich2\lib
- 添加
–lmpi
- 添加規則的源文件
- 編譯
由於在我的項目沒有其他的規則,我不創建一個makefile,我只是去命令行和嘗試編譯如下:
g++ -I"C:\Program Files\MPICH2\include" main.cpp -L"C:\Program Files\MPICH2\lib" -lmpi
這給我的undefined reference
一大把代碼中每個單個MPI符號上的錯誤。我花了幾個小時試圖修復它,將玩家-I
,-L
和-l
切換,混洗參數的順序,甚至將所有.lib文件複製到我的源代碼所在的目錄中,但似乎沒有任何效果。
需要什麼樣的巫術才能讓這件事鏈接?
編輯:我想我找到了問題:這裏的詳細方式連接器輸出的(增加-Wl,--verbose
到編譯命令)的摘錄:
attempt to open C:\Program Files\MPICH2\lib/libmingwex.dll.a failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.dll.a failed
attempt to open C:\Program Files\MPICH2\lib/libmingwex.a failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.lib failed
attempt to open C:\Program Files\MPICH2\lib/libmingwex.dll failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.dll failed
attempt to open C:\Program Files\MPICH2\lib\libmingwex.a failed
顯然,鏈接器添加了/
代替\
到我提供的目錄名稱(因爲某些原因尋找lib___.a
格式時除外),這顯然不是有效的路徑。有什麼辦法可以告訴鏈接器使用反斜槓而不是斜槓嗎?
這也引起了我的注意:
attempt to open /mingw/lib/libmingwex.a succeeded
所以,我想編寫這樣的:
g++ -I"/Program Files/MPICH2/include" -L"/Program Files/MPICH2/lib" objManager.cpp ongom.cpp io.cpp main.cpp -lmpi -lcxx
但我仍然得到同樣的錯誤undefined reference
。
介意發佈編譯器/鏈接器日誌? –
真的沒有什麼可看的,它只有幾十行,如下所示:'C:\ Users \ Bansaghi \ AppData \ Local \ Temp/ccIF61Uc.o:main.cpp :(。text + 0x1615):未定義的引用'MPI_Comm_rank '' – suszterpatt