2013-07-11 38 views
1

編譯的openmpi應用程序在編譯我的應用程序時,我一直在遇到這個鏈接錯誤:(?大概BEC增量聯)鏈接錯誤在Windows

error LNK2001: unresolved external symbol "public: __cdecl MPI::Comm::Comm(void)" ([email protected]@@[email protected]) E:\Users\UT1JVT\Tanoshii\Eden\Inceptor2\Inceptor2\Node.obj Inceptor2 

如果我連續編譯它兩次,它改變這個:

error LNK2019: unresolved external symbol "public: __cdecl MPI::Comm::Comm(void)" ([email protected]@@[email protected]) referenced in function "public: __cdecl MPI::Intracomm::Intracomm(struct ompi_communicator_t *)" ([email protected]@@[email protected][email protected]@@Z) E:\Users\UT1JVT\Tanoshii\Eden\Inceptor2\Inceptor2\Node.obj Inceptor2 

我已經嘗試過在x64和32位模式下使用匹配的MPI庫無濟於事。我也定義了:OMPI_IMPORTS, OPAL_IMPORTS and ORTE_IMPORTS(它修復了我之前的一些鏈接錯誤),但我仍然無法擺脫這一個。

的違規行爲:

_roleLocalComm = &MPI::COMM_WORLD.Split(_roleId,_nodeId); 

如果我刪除此行(創建通訊組中的所有代碼),錯誤消失。我在Linux(Open MPI v1.6.5)中構建了相同的源代碼,並且工作正常。

這裏的編譯命令:

/Zi /nologo /W3 /WX- /Od /D "_DEBUG" /D "_CONSOLE" /D "OMPI_IMPORTS" /D "OPAL_IMPORTS" /D "ORTE_IMPORTS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"x64\Debug\testx64.pch" /Fa"x64\Debug\" /Fo"x64\Debug\" /Fd"x64\Debug\vc100.pdb" /Gd /errorReport:queue 

更新: 我試圖剝離下來到光禿禿的骨頭和使用MPIC++編譯它,但我仍然得到同樣的確切問題。這裏的命令行:

mpic++ EntryPoint.cpp -showme 
cl.exe EntryPoint.cpp /D "OMPI_IMPORTS" /I"C:\Program Files\OpenMPI_v1.6.2-x64\include" /TP /EHsc /link /LIBPATH:"C:\Program Files\OpenMPI_v1.6.2-x64\lib" libmpi_cxx.lib libmpi.lib libopen-pal.lib libopen-rte.lib advapi32.lib Ws2_32.lib shlwapi.lib 

不能讓它在最初的工作(噸鏈接錯誤),但後來我意識到,OMPI_IMPORTS沒有定義所以我編輯%的openmpi%/股/的openmpi/MPIC++ - 包裝-data.txt添加/D "OMPI_IMPORTS"

此外,它可能都提到我也正在爲MPI :: Datatype :: Free()似乎是一個known issue鏈接失敗。我通過添加下面的代碼爲此做了一個解決方法。我想這不會導致我很大的問題,因爲我的數據類型不會被清理,直到作業完成。

void MPI::Datatype::Free(void) { 
} 
+0

可能有助於顯示你的編譯命令:如果你有意見和一些經驗,你可能會權衡英寸 –

+0

@ bob.sacamento我已經添加了編譯命令。我正在使用visual studio 2010 – Mel

+0

對不起,對vis studio 2010不熟悉。我可能會嘗試重新排列要鏈接的庫的順序。這有助於解決這些錯誤。這就是我所擁有的。祝你好運! –

回答

1

我不知道你的問題的原因,但我認爲你碰到了無人維護的代碼:對於Windows

+0

謝謝!使用C綁定工作 – Mel

2

要反映@cschwan所說的話,MPICH實際上不再支持Windows了。版本1.4.1p已停止支持。不幸的是,沒有一個大的開源實現已經有足夠的時間支持大量的Windows支持,因爲它不再被太多人在課堂外使用,也沒有開發人員使用Windows。但是,Windows中MPI的最佳解決方案是直接轉到Microsoft。儘管如此,在開始發佈基於MS-MPI的任何工作之前,我會仔細檢查他們的許可證是否符合您計劃的任何用途。我並不太熟悉他們的工作方式。

http://www.microsoft.com/en-us/download/details.aspx?id=36045

這裏的wiki頁面,現在解釋MPICH對事情的態度:

http://wiki.mpich.org/mpich/index.php/Frequently_Asked_Questions#Q:_Why_can.27t_I_build_MPICH_on_Windows_anymore.3F

至於C++綁定走,你會不會在那些從大得到太多的支持因爲它們已經從MPI中刪除,所以它們不再是開源實現。但是,還有其他綁定可用。我知道Boost有一些可用的(http://www.boost.org/doc/libs/1_54_0/doc/html/mpi.html),雖然我沒有經驗它們有多可用。實際上關於scicomp網站上現在正在進行的一個有趣的討論。

https://scicomp.stackexchange.com/questions/7978/what-features-do-users-need-from-an-mpi-c-interface

+0

這解釋了爲什麼MPICH仍然有一個Windows下載實際鏈接到Microsoft網站。 – cschwan