【问题标题】:icc compiled code unable to load shared object (libimf.so)icc 编译代码无法加载共享对象 (libimf.so)
【发布时间】:2012-07-09 10:44:47
【问题描述】:

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

【问题讨论】:

    标签: ubuntu icc


    【解决方案1】:

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

    【讨论】:

    • 谢谢;是的,我复制粘贴了错误的目录(现已修复)。我做了“导出 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/lib/intel64”无济于事。还有什么我忘记了吗?
    【解决方案2】:

    好的解决了;

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

    gedit ~/.bashrc
    

    然后

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

    然后,从 ~/ 目录执行:

    source .bashrc
    

    【讨论】:

      【解决方案3】:

      英特尔编译器带有各种设置环境的 shell 脚本。通常,您只需获取一个脚本即可:

       source ${INTEL_COMPILER_DIR}/bin/compilervers.csh
      

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

      【讨论】:

        【解决方案4】:

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

        -Wl,--as-needed
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-17
          • 2015-09-30
          • 2021-07-28
          • 2023-03-08
          • 1970-01-01
          • 2013-04-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多