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 に答える