1

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

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

4 回答 4

4

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

于 2012-07-09T10:54:00.043 回答
3

好的解决了;

以备将来记录(如果有的话,我每年使用一次 icc):

gedit ~/.bashrc

然后

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

然后,从 ~/ 目录执行:

source .bashrc
于 2012-07-09T11:09:13.250 回答
1

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

 source ${INTEL_COMPILER_DIR}/bin/compilervers.csh

它还应该为您可能拥有的其他产品(MKL、TBB 等)设置。

于 2015-01-08T16:44:02.677 回答
1

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

-Wl,--as-needed

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

于 2017-07-21T19:01:40.660 回答