icc编译的代码无法加载共享对象(libimf.so)

时间:2012-07-09 10:44:47

标签: ubuntu icc

我正在使用icc(在ubuntu下)编译cpp代码:

icc -I/usr/share/R/include -I/~/Desktop/work/p1/geqw4/vi3/out/sp/ccode/eigen -fpic -O2 -pipe -c -DEIGEN_NO_DEBUG aha.cpp -o aha.o

icc -shared -o aha.so aha.o -L/usr/local/lib/R/site -Wl,-rpath,/usr/local/lib/R/site -L/usr/lib64/R/lib -lR

它编译,但在运行可执行文件时我得到:

unable to load shared object '~/Desktop/work/p1/geqw4/vi3/out/sp/ccode/simcode/mine2/aha.so':
  libimf.so: cannot open shared object file: No such file or directory

libimf.so位于/ opt / intel / lib / intel64中。我记得遇到过同样的问题了 上次我使用icc(一年前),但我不记得解决方案是什么。

4 个答案:

答案 0 :(得分:3)

您需要更新库路径,以便链接器在/ opt / intel / bin中查找。 (你确定它的bin而不是lib吗?)你可以将它添加到LD_LIBRARY_PATH环境变量中,或者如果你想要它在系统范围内,可以将它添加到/etc/ld.so.conf。

答案 1 :(得分:1)

好的解决了;

以便将来记录(我每年使用一次icc,如果那么多):

DO

gedit ~/.bashrc

然后

LD_LIBRARY_PATH=/opt/intel/lib/intel64
export LD_LIBRARY_PATH

然后,从〜/目录执行:

source .bashrc

答案 2 :(得分:1)

英特尔编译器带有各种用于设置环境的shell脚本。通常,您所要做的就是获取一个脚本:

 source ${INTEL_COMPILER_DIR}/bin/compilervers.csh

并且还应该为您可能拥有的其他产品(MKL,TBB等)进行设置。

答案 3 :(得分:1)

实际上并不需要很多icpc或icc链接的共享库。构建之后,应该在最终构建文件(可执行文件或共享库)上运行ldd -u -r以显示所有未使用的库依赖项。如果您看到未使用libimf,则可以使用以下选项编译可执行文件或共享库:

-Wl,--as-needed

然后重新运行ldd -u -r并查看相关性是否消失。