2013-07-11 23 views
0

我在centOS 6.2上設置cuda 5.0,我已經設置了成功,因爲我命令queryDevice,我通過了。當我進入/root/NVIDIA_CUDA-5.0_Samples,和我做這個項目,我得到了以下錯誤:/usr/local/cuda-5.0/lib64/libcusparse.so:未定義引用std :: bad_alloc :: what()[email protected]_3.4.9

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() [email protected]_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的操作,但是有錯誤要麼

回答

2

CentOS 6.2附帶版本4.4。 6個gcc。 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就在那裏。所以我認爲你有一個搞砸的安裝。

+0

我以「strings /usr/lib/libstdc++.so.6 | grep GLIBC」的形式執行命令,然後OS返回「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,GLIBC_2.3,GLIBC_2.0,GLIBC_2.3.2,GLIBC_2.4,GLIBC_2.1,GLIBC_2.1.3,GLIBC_2.2,GLIBCXX_FORCE_NEW」。有沒有名爲GLIBCXX_3.4.9的軟件包? – taoyuanjl

+0

你是對的,我進一步檢查操作系統,我的操作系統是5.8分。所以在我使用cuda 5.0安裝RHEL5.0之後,錯誤消失了。很感謝! – taoyuanjl