2012-12-04 25 views
0

我需要一個C++項目鏈接AMD ACML庫。鏈接AMD ACML在Linux中

我試圖編譯它以這樣的方式

g++ mainConsole.cpp -L./acml/pgi64_int64/lib -lacml 

,但我得到這個錯誤:

/usr/bin/ld: skipping incompatible ./acml/pgi64_int64/lib/libacml.so when searching for -lacml 
/usr/bin/ld: skipping incompatible ./acml/pgi64_int64/lib/libacml.a when searching for -lacml 
/usr/bin/ld: cannot find -lacml 

我可以爲了解決做什麼?

+0

你建立你的項目爲32位或64位? – NPE

回答

1

看來鏈接被告知使用64庫時編譯使用32位來完成。

您打電話給g ++會編譯的鏈接。如果你將兩者分開,調試更容易。例如:

g++ -I./acml/pgi64_int64/include mainConsole.cpp -o mainConsole.o 
g++ -L./acml/pgi64_int64/lib -lacml mainConsole.o -o mainConsole 

可以驗證使用文件庫。在我的系統我得到:

$ file /usr/lib/acml/gfortran/libacml.so 
/usr/lib/acml/gfortran/libacml.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped 

編譯對象應該是相同的:

$ file mainConsole.o 
mainConsole.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped 

問題是,無論是你自己項目的32位編譯或更可能是你的「的Int64」的使用ACML的verison。你可以閱讀關於int64 here的更多信息。我建議你嘗試ACML的非int64版本。例如,而不是下載ACML-5-3-1-PGI-64bit- 的Int64 .tgz的,下載ACML-5-3-1-PGI-64bit.tgz。