2011-08-31 163 views
-2

我想編譯this volume rendering project。我安裝我的Ubuntu 10.10機器上的CUDA工具包和SDK,並已能夠運行的例子,但我得到這個:故障編譯cuda代碼

[email protected]:~/vfray$ make 
make -f MakefileCPU 
make[1]: Entering directory `/home/antonio/vfray' 
make[1]: `vfRayCPU' is up to date. 
make[1]: Leaving directory `/home/antonio/vfray' 
make -f MakefileCUDA 
make[1]: Entering directory `/home/antonio/vfray' 
nvcc -o vfRay.cu_o -c vfRay.cu --ptxas-options=-v --compiler-bindir=/usr/bin/gcc-4.3 --compiler-options -fno-strict-aliasing -I. -I/usr/local/cuda/include -I/usr/local/cuda/SDK/C/common/inc -DUNIX -O3 
/usr/bin/gcc-4.3: No such file or directory 
make[1]: *** [vfRay.cu_o] Error 1 
make[1]: Leaving directory `/home/antonio/vfray' 
make: *** [cuda] Error 2 

我怎樣才能解決這個問題?


編輯:運行由talonmies在vfRay.cu文件中描述的步驟時,我得到:

[email protected]:~/vfray$ nvcc --compiler-bindir=./jdir -arch=sm_20 -c -Xptxas="-v" vfRay.cu 
    vfRay.cu:25: fatal error: cutil.h: No such file or directory 
    compilation terminated. 

新編輯:好了,在做-L到包括cutil。 h目錄我得到了vfRay.cu和vfRayKernel.cu的這個。

[email protected]:~/vfray$ nvcc --compiler-bindir=./jdir -arch=sm_20 -c -Xptxas="-v" vfRay.cu -I/home/antonio/NVIDIA_GPU_Computing_SDK/C/common/inc/ 
vfRay.cu:48: fatal error: vfRayKernel.cu: No such file or directory 
compilation terminated. 
[email protected]:~/vfray$ nvcc --compiler-bindir=./jdir -arch=sm_20 -c -Xptxas="-v" vfRayKernel.cu -I/home/antonio/NVIDIA_GPU_Computing_SDK/C/common/inc/ 
vfRayKernel.cu(80): error: identifier "BLOCK_SIZE" is undefined 

vfRayKernel.cu(181): error: identifier "BLOCK_SIZE" is undefined 

vfRayKernel.cu(262): error: identifier "BLOCK_SIZE" is undefined 

3 errors detected in the compilation of "/tmp/tmpxft_000064a5_00000000-4_vfRayKernel.cpp1.ii". 

我認爲這是一個makefile問題,我懷疑這個編譯會在沒有修改的情況下工作。

這是生成文件的項目:

# 
# Makefile CPU/CUDA 
# 

#----------------------------------------------------------------------------- 

all: cpu cuda 

cpu:  MakefileCPU 
      make -f MakefileCPU 

cuda:  MakefileCUDA 
      make -f MakefileCUDA 

clean: 
      make -f MakefileCPU clean 
      make -f MakefileCUDA clean 

我做這個mod,而不是工作:

all: cpu cuda 

cpu: MakefileCPU 
     make -f MakefileCPU 

cuda: MakefileCUDA 
     make -f MakefileCUDA 
     nvcc --compiler-bindir=./jdir -arch=sm_20 -c -Xptxas="-v" 

clean: 
     make -f MakefileCPU clean 
     make -f MakefileCUDA clean 

編輯:我修改了common.mk文件,以便線93分gcc 4.4,現在我得到cutil丟失的錯誤。我可以在哪裏修改它?我嘗試將它放在usr/bin的ld文件夾中,但ld是一個程序,我無法刪除它。

安東尼@安東尼奧 - 桌面:〜/ vfray $使

make -f MakefileCPU 
make[1]: Entering directory `/home/antonio/vfray' 
make[1]: `vfRayCPU' is up to date. 
make[1]: Leaving directory `/home/antonio/vfray' 
make -f MakefileCUDA 
make[1]: Entering directory `/home/antonio/vfray' 
g++ -fPIC -o .///vfRay .///vfRayPreComp.o .///vfRay.cu_o -L/usr/local/cuda/lib64 -L/usr/local/cuda/SDK/C/lib -L/usr/local/cuda/SDK/C/common/lib -lcudart -lGL -lGLU -lglut -L/usr/local/cuda/lib64 -L/usr/local/cuda/SDK/C/lib -L/usr/local/cuda/SDK/C/common/lib -lcutil 
/usr/bin/ld: cannot find -lcutil 
collect2: ld returned 1 exit status 
make[1]: *** [vfRay] Error 1 
make[1]: Leaving directory `/home/antonio/vfray' 
make: *** [cuda] Error 2 
+0

指定導入路徑的選項是庫的'-I'和'-L'。 – talonmies

+0

仍然無法使用,請閱讀編輯。我相信這隻有在makefile被修改之後纔會起作用。 – andandandand

+0

只需使用我在答案中提供的「--compiler-bindir」選項修改makefile即可。你做這件事比它需要的複雜得多10倍。沒有你問到的東西現在跟你的原始問題有什麼關係...... – talonmies

回答

3

的NVCC --compiler-bindir,顧名思義,將一個目錄作爲參數,而不是編譯器可執行文件本身。爲了以這種方式使用替代編譯器,您需要傳遞一個目錄,其中包含一個名爲gcc的可執行文件或一個名爲gcc的鏈接,該鏈接指向一個有效的gcc版本。最簡單的方法是創建一個包含指向受支持的編譯器版本的符號鏈接的locate目錄。事情是這樣的:

1. [email protected]:~$ mkdir jdir 

2. [email protected]:~$ cd jdir 

3. [email protected]:~/jdir$ ln -s /usr/bin/gcc-4.4 ./gcc 

4. [email protected]:~$ ls -l jdir 
    total 0 
    lrwxrwxrwx 1 user user 12 2011-08-31 08:34 gcc -> /usr/bin/gcc-4.4 

5. [email protected]:~/jdir$ cd .. 

6. [email protected]:~$ nvcc --compiler-bindir=./jdir -arch=sm_20 -c -Xptxas="-v" particles3.cu 
    ptxas info : Compiling entry function '_Z6pointsP6float4f' for 'sm_20' 
    ptxas info : Function properties for _Z6pointsP6float4f 
     0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads 
    ptxas info : Used 29 registers, 44 bytes cmem[0], 4 bytes cmem[14], 12 bytes cmem[16] 

編輯1:

在你試圖建立你需要編輯文件common.mk, line 93並更改--compiler-bindir選項,其中建立了絕對路徑的代碼在上面顯示的某個地方包含鏈接。


編輯2:

您試圖編譯代碼是依靠NVIDIA GPU Computing SDK。您必須將環境變量ROOT_DIR設置爲指向SDK分發版中的C樹,或者修改您嘗試構建的代碼附帶的common.mk文件的line 50。您還必須確保通過在SDK根目錄的C/common目錄中運行make來編譯cutil庫。

+0

particles3.cu ?? – andandandand

+0

我正在通過項目中的makefile建立,而不是單獨建立。 – andandandand

+1

我使用的.cu文件只是我自己用於說明目的之一。 bindir的設置只需要執行一次,並且解決方案在Makefile中與單獨執行編譯完全相同。 – talonmies