2014-12-02 62 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