/usr/local/cuda-5.0/lib64/libcusparse.so:对`std :: bad_alloc :: what()const@GLIBCXX_3.4.9的未定义引用

时间:2013-07-11 02:58:48

标签: cuda installation

我在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的操作,但是有错误

1 个答案:

答案 0 :(得分:2)

CentOS 6.2随附gcc版本4.4.6。 Niether 4.1.7和4.4是该发行版的正确编译器。我并不是说他们不能以某种方式工作,但是你可以使用发行版附带的编译器获得更好的结果。 (您可能还有一个混乱的编译器安装。)

由于libcusparse.so是以工具包的二进制形式提供的,因此它是针对特定的set of libraries associated with your compiler(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在那里。所以我觉得你搞砸了。