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

Ubuntu icc编译代码无法加载共享对象(libimf.so),ubuntu,icc,Ubuntu,Icc,我正在用icc(在ubuntu下)编译一个cpp代码: 它可以编译,但在运行可执行文件时,我得到: 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(在ubuntu下)编译一个cpp代码:

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

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(一年前),但我不记得解决方案是什么

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

确定

作为未来记录(我每年使用icc一次,如果需要的话):

然后

然后,从~/目录执行以下操作:

source .bashrc

英特尔编译器附带了各种用于设置环境的shell脚本。通常,您只需编写一个脚本:

 source ${INTEL_COMPILER_DIR}/bin/compilervers.csh

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

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

-Wl,--as-needed

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

谢谢;是的,我复制粘贴了错误的目录(现已修复)。我确实“导出LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/lib/intel64”但没有用。还有什么我忘了的吗?
source .bashrc
 source ${INTEL_COMPILER_DIR}/bin/compilervers.csh
-Wl,--as-needed