2013-01-24 65 views
0

我試圖安裝使用MPI的程序(並行冰原模型或PISM)。我不斷遇到錯誤MPI未定義對象引用

libpismutil.so: undefined reference to `ompi_mpi_cxx_op_intercept' 
libpismutil.so: undefined reference to `MPI::Datatype::Free()' 
libpismutil.so: undefined reference to `MPI::Comm::Comm()' 
libpismutil.so: undefined reference to `MPI::Win::Free()' 

當鏈接一個CXX可執行文件。我有點難以理解爲什麼會發生這種情況;該程序的配置找到了所有MPI可執行文件和庫所在的位置。

在另一個線程,有人建議,這是由於當MPI是建立與Fortran語言或C不同的命名慣例,但看到我在我的/usr/binmpicc.mpich2mpif90.mpich2我認爲這不會是一個問題。

+1

你說的有點奇怪,因爲ompi_mpi_cxx_op_intercept看起來像是一個openmpi的內部例程,但是mpicc.mpich2表明你正在使用mpich2。你能否澄清你如何編譯和鏈接,以及如何構建libpismutil.so?其次是http://www.cs.utah.edu/formal_verification/ISP-Eclipse/help/troubleshooting.html有關嗎?最後你知道MPI C++綁定已經從MPI標準中刪除了嗎? –

+0

@IanBush,雖然技術上從MPI-3標準中刪除,但實現者可以自由地繼續支持C++綁定,並且大多數供應商肯定會這樣做,因爲使用C++ MPI API的並行代碼量很大(此問題演示了點)。當然,這意味着新的MPI-3功能不會將其引入到現有的C++包裝中,至少不是以標準定義的方式。 –

+0

@HristoIliev - 是的,我意識到這一點。更確切地說,如果OP在擴展PISM時確保OP知道這一點 - 根據已棄用或已刪除的標準編寫新代碼或標準功能不是最佳方案。 –

回答

2

經過很多驚愕後,我發現了罪魁禍首。我試圖安裝的程序使用一個名爲PETSc的科學計算庫; PETSc的標準安裝不會生成PISM所需的共享對象文件,您必須明確告訴它。一旦完成,PISM安裝正確。

當然,我無法運行它,因爲openmpi有一些其他模糊的錯誤,但這是另一個線程的故事。