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

问题描述:

我编译与ICC一段cpp的代码(在Ubuntu下):ICC编译的代码无法加载共享对象(libimf.so)

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(一年前)时遇到同样的问题 ,但我不记得解决方案是什么。

好的解决了;

为将来的记录(我用的ICC每年一次,如果多):

gedit ~/.bashrc 

然后

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

然后,在〜/目录下执行:

source .bashrc 

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

+0

谢谢;是的,我复制粘贴错误的目录(现在修复)。我做了 “出口LD_LIBRARY_PATH = $ LD_LIBRARY_PATH中:/ opt /英特尔/ lib目录/ Intel64位” 无济于事。还有什么我忘了? – user189035 2012-07-09 11:02:35

英特尔编译器来用各种设置环境的shell脚本。一般来说,所有你需要做的就是源一个脚本:

source ${INTEL_COMPILER_DIR}/bin/compilervers.csh 

而且还应当建立对你可能有(MKL,TBB等)等产品。

很多是ICPC或ICC链接不实际需要的共享库。你建立后,你应该运行在最终版本的文件(可执行文件或共享库)ldd -u -r显示所有未使用的库的依赖。如果您发现libimf没有被使用,那么你可以编译你的可执行文件或共享库使用此选项:

-Wl,--as-needed 

然后重新运行ldd -u -r,看看是否依赖消失。