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。Niether 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 回答