2012-07-09 406 views
0

我編譯與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(一年前)時遇到同樣的問題 ,但我不記得解決方案是什麼。

回答

1

好的解決了;

爲將來的記錄(我用的ICC每年一次,如果多):

gedit ~/.bashrc 

然後

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

然後,在〜/目錄下執行:

source .bashrc 
3

您需要更新庫路徑,以便鏈接器將顯示在/ 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

1

英特爾編譯器來用各種設置環境的shell腳本。一般來說,所有你需要做的就是源一個腳本:

source ${INTEL_COMPILER_DIR}/bin/compilervers.csh 

而且還應當建立對你可能有(MKL,TBB等)等產品。

1

很多是ICPC或ICC鏈接不實際需要的共享庫。你建立後,你應該運行在最終版本的文件(可執行文件或共享庫)ldd -u -r顯示所有未使用的庫的依賴。如果您發現libimf沒有被使用,那麼你可以編譯你的可執行文件或共享庫使用此選項:

-Wl,--as-needed 

然後重新運行ldd -u -r,看看是否依賴消失。