0

我需要在 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

我该怎么做才能解决?

4

1 回答 1

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验证库。在我的系统上,我得到:

$ 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的更多信息。我建议您尝试使用非 int64 版本的 ACML。例如,不要下载 acml-5-3-1-pgi-64bit-int64.tgz,而是下载acml -5-3-1-pgi-64bit.tgz。

于 2013-08-22T15:21:01.350 回答