2014-12-02 60 views
1

我想選擇openmpi作爲我的並行c編譯器,並將其添加到我的LD_LIBRARY_PATH.profile。當我編譯代碼時,它工作並生成了一個.o文件。但是,當我跑的.o文件時出現的錯誤:Changeable LD_LIBRARY_PATH

error while loading shared libraries: libmpi.so.0: cannot open shared object file: No such file or directory 

我的同事告訴我,也許我沒有加了openmpi LIB權利。我檢查了我的的.profile並做了一些技巧,相應的剪輯如下:

export LD_LIBRARY_PATH=/apps/openmpi-1.4.3/lib:${LD_LIBRARY_PATH} 
echo 
echo "HERE is .profile!" 
echo 
echo $LD_LIBRARY_PATH 
echo 

然後我退出並重新登錄,它說:

HERE is .profile! 

/apps/openmpi-1.4.3/lib:/usr/... 

然而,當我輸入終端echo $LD_LIBRARY_PATH/apps/openmpi ...部分丟失,只剩下剩下的部分。 LD_LIBRARY_PATH變化如此之快? 我試圖執行另一個命令:

. .profile 

的「了openmpi」的部分又走了出來,.o文件將工作順利。 造成LD_LIBRARY_PATH不同的原因是什麼?據我所知,.profile是一個登錄外殼。
ps:我使用MAC osX和bash。

@jherran:我試過你說的,但它似乎不工作。其實我曾經在我的.bashrc和.bash_profile中添加LD_LIBRARY_PATH。在.profile中添加另一行:

[ -r ~/.bashrc ] && source ~/.bashrc 

我剛纔測試了一遍。刪除.profile中的LD行,並將其添加到.bash_profile中,然後退出然後登錄。此時,echo $ LD_LIBRARY_PATH不會輸出... openmpi。但如果我輸入相同的 . .bash_profile

它的工作原理!

好吧,剛來更新消息,之所以出現上述情況我仍然找不到,最後我轉向另一個並行編譯器mpich。一切都安定了

+0

嘗試在'/ etc/environment'中設置它? LD_LIBRARY_PATH =/apps/openmpi-1.4.3/lib – jherran 2014-12-02 11:13:55

+0

@jherran:不,我正在開發一個集羣,並且沒有授權對根目錄下的文件進行任何更改。我不認爲它應該如此神祕,因爲我的同事們從未遇到過這樣的問題。 T_T。 – Schawn 2014-12-02 11:23:35

回答

1

您正在導出PATH,並且稍後可能會覆蓋此路徑。

您需要將您的代碼添加到您的~/.bash_profile。這是個人初始化文件,爲登錄shell執行。

+0

我知道,但我確信在我的場合'.bashrc'被執行,所以這不是問題。 – Schawn 2015-01-16 13:42:42