我正在使用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(一年前),但我不记得解决方案是什么。
答案 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
并查看相关性是否消失。