2011-12-22 58 views
2

我是新來的Cuda的工作,我試圖編譯這個簡單的test_1.cu文件:使用此Cuda的編譯器不能與GCC 4.5 +

#include <stdio.h> 

__global__ void kernel(void) 
{ 
} 

int main (void) 
{ 
    kernel<<<1,1>>>(); 
    printf("Hello, World!\n"); 
    return 0; 

} 

nvcc test_1.cu

我得到的輸出是:

​​

我的gcc --version:

gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 
Copyright (C) 2011 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

如何安裝GCC(4.4 - )的第二個版本與4.6沿不搞亂了一切?

我發現這個老話題:

CUDA incompatible with my gcc version

答案是:

GCC 4.5和4.6不與CUDA的支持 - 代碼不會編譯和 的休息工具鏈(包括cuda-gdb)將無法正常工作。 你不能使用它們,限制是不可協商的。

你唯一的解決辦法是安裝一個GCC 4.4版作爲第二 編譯器(大多數發行版將允許)。有一個選項,其可以用來指向一個替代 編譯 NVCC --compiler-BINDIR。創建一個本地目錄和創建符號鏈接到 支持gcc版本的可執行文件。傳遞本地目錄通過--compiler-BINDIR選項NVCC ,你應該能夠編譯 CUDA代碼,而不影響系統的其餘部分。

但我不知道該怎麼做

+0

不完全如此。 gcc 4.5工作得很好。它要求你註釋頭文件中的錯誤生成代碼。 gcc 4.6是cuda 4.0不支持的另一個問題。不過,我希望新的cuda 4.1(1月初到期)與4.6兼容 – 2011-12-22 16:17:05

回答

2

做一些研究顯示在線爲完成這一任務的幾種方法。我只是測試了這裏找到的方法:http://www.vectorfabrics.com/blog/item/cuda_4.0_on_ubuntu_11.04,它對我來說就像一個魅力。它會引導您安裝gcc 4.4並創建腳本以使用nvcc運行該版本。如果你更喜歡嘗試在你的文章中提到的方法,我建議遵循第一個鏈接來安裝gcc4.4,然後創建你的文章中提到的符號鏈接。在Linux中創建符號鏈接是通過使用'ln'命令完成的。

例如:

ln -s [source file/folder path] [linkpath] 

這個鏈接給出了建立雙方的Ubuntu和Windows符號鏈接的幾個例子:http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/。希望這點能讓你朝着正確的方向前進。

0

另一種方式讓與非默認的編譯器nvcc工作(不像@ Sluml的答案,它讓更多的靈活性):

起初,就像@Slump建議,你需要創建目錄~/local/gcc-4.4/,然後創建有適合gcc版本的符號鏈接:for i in gcc gxx; do ln -s /usr/bin/${i}-4.4 ~/local/cudagcc/${i}; done。現在當你運行nvcc -ccbin ~/local/gcc-4.4/ ...時,nvcc會使用正確版本的gcc。

這裏是強制nvcc使用特定主機編譯器的小CMake片段。

option (CUDA_ENFORCE_HOST_COMPILER "Force nvcc to use the same compiler used to compile .c(pp) files insted of gcc/g++" OFF) 
if (${CUDA_ENFORCE_HOST_COMPILER}) 
    set (CMAKE_GCC_TEMP_DIR "CMakeGCC") 
    file(MAKE_DIRECTORY ${CMAKE_GCC_TEMP_DIR}) 
    execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_C_COMPILER} ${CMAKE_GCC_TEMP_DIR}/gcc) 
    execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CXX_COMPILER} ${CMAKE_GCC_TEMP_DIR}/g++) 
    set(CUDA_NVCC_FLAGS -ccbin ${CMAKE_GCC_TEMP_DIR} ${CUDA_NVCC_FLAGS}) 
endif() 
3

在我的情況下,我沒有root權限,所以我不能完全替換當前gcc(4.7)與舊版本4.4(我認爲這是一個不好的選擇)。儘管我在CUDA的安裝地點擁有權利。我的解決方案是創建一個額外的文件夾(例如/ somepath/gccfornvcc /),無論我擁有什麼權限,然後創建一個指向nvcc接受編譯器的鏈接。我已經有了gcc 4.4可用(但你可以安裝它,而不需要刪除你的當前版本)。

ln -s [path to gcc 4.4]/gcc-4.4 /somepath/gccfornvcc/gcc 

然後,在同一文件夾中的NVCC二進制的生活,你應該找到一個名爲nvcc.profile文件。在那裏,你只需要添加以下行:

compiler-bindir = /somepath/gccfornvcc 

而這將使nvcc使用正確的編譯器。這有助於使系統保持在適當的狀態,保持最新的編譯器,但nvcc(僅nvcc)將使用舊的編譯器版本。