我需要在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
我可以做些什么才能解决?
答案 0 :(得分:1)
当编译使用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”版本。您可以在int64 here上阅读更多内容。我建议你尝试使用非int64版本的ACML。例如,不要下载acml-5-3-1-pgi-64bit- int64 .tgz,而是下载acml-5-3-1-pgi-64bit.tgz。