0

私はcentOS 6.2でcuda 5.0をセットアップしています。コマンドqueryDeviceを実行して合格したため、すでに正常にセットアップされています。/root/NVIDIA_CUDA-5.0_Samples と入力してプロジェクトを作成すると、次のエラーが表示されました。

make[1]: Entering directory `/root/NVIDIA_CUDA-5.0_Samples/7_CUDALibraries/conjugateGradientPrecond'
g++ -m64  -I/usr/local/cuda-5.0/include -I. -I.. -I../../common/inc -o main.o -c main.cpp
g++ -m64 -o conjugateGradientPrecond main.o -L/usr/local/cuda-5.0/lib64 -lcudart -lcublas -lcusparse 
/usr/local/cuda-5.0/lib64/libcusparse.so: undefined reference to `std::bad_alloc::what() const@GLIBCXX_3.4.9'
collect2: ld returned 1 exit status
make[1]: *** [conjugateGradientPrecond] Error 1

私のコンパイラは gcc44 で、以下の手順で入手できます。

1.sudo rm gcc
2.sudo ln -s /usr/bin/gcc-4.4 gcc

1と2の上位操作をする前に、私のコンパイラはgcc 4.1.7で、タイトルのようなエラーが出たので、1と2の操作をしましたが、いずれかのエラーがあります

4

1 に答える 1

2

CentOS 6.2 には、バージョン 4.4.6 の gcc が同梱されています。4.1.7 も 4.4 も、そのディストリビューションの正しいコンパイラではありません。何らかの方法で動作させることができないと言っているわけではありませんが、ディストリビューションに同梱されているコンパイラを使用すると、より良い結果が得られます. (コンパイラのインストールが台無しになっている可能性もあります。)

libcusparse.soはツールキットからバイナリ形式で提供されるため、コンパイラ (GLIBC) に関連付けられた特定のライブラリ セットに合わせて調整されていますコンパイラの変更によりこれらを変更すると、問題が発生します。

解決策は、ディストリビューションに同梱されているコンパイラ パッケージ (gcc、g++) を使用することです。

編集:以下の質問に答えて、「クリーン」なCentOS6.2をインストールしました。

私が実行すると:

strings /usr/lib64/libstdc++.so.6 |grep GLIBC 

私は得る:

$ strings /usr/lib64/libstdc++.so.6 |grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
$

そして、そこにあることがわかりますGLIBCXX_3.4.9。だから私はあなたが台無しにされたインストールをしていると思います。

于 2013-07-11T03:27:52.457 に答える