我需要链接一个C++项目中的AMD ACML库。
我试着这样编译它:

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

我能做些什么来解决?

最佳答案

当编译使用32位完成时,链接器似乎被告知使用64库。
对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位编译,要么更可能是你对ACML的“int64”版本的使用。您可以在int64here上阅读更多内容。我建议您尝试使用非int64版本的ACML。例如,不要下载acml-5-3-1-pgi-64bit-int64.tgz,而是下载acml-5-3-1-pgi-64bit.tgz。

关于linux - 在Linux中链接AMD ACML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13705891/

10-10 17:16