2016-01-23 475 views
0

我有一個opencv C++腳本,我需要在其中使用cudamemcpy。所以我在我的腳本中使用了cudamemcpy並將該文件保存爲.cu我正在使用cmake。所以我將.cu添加爲cuda_executable。但是,當我用「命令使」我收到以下錯誤在cmake中使用nvcc編譯.cu

error I get

是Makefile cmakelists.txt

因此,在第27行,我改變的C++ 0x到C++ 11和我同樣的錯誤 所以我試過gnu ++ 11但我仍然有同樣的錯誤。

+2

您不需要使用.cu擴展名源代碼如果你只是從運行時API調用函數。另外,請不要將錯誤文本和代碼作爲圖像發佈。搜索不適用於圖像 – talonmies

+1

有一代從來不知道撥號調制解調器的工程師。 – Drop

回答

3

問題是,-std=c++11未被添加到nvcc構建命令,如果它通過add_definitions()傳遞。從FindCUDA cmake documentation

標記傳遞到add_definitions與-D或/ D傳遞給nvcc。

其他選項如-std=c++11不會傳遞給nvcc

您可以通過它與

cuda_add_executable(opencv opencv.cu OPTIONS -std=c++11) 

增加了CUDA_NVCC_FLAGS

set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11") 

或每個目標水平talonmies使c++11在全球範圍內的評論指出:如果只有你需要運行時API的功能,如cudaMemcpy(),你可以在普通的C++文件中使用它們(不需要.cu擴展名)。然後,您需要包含cuda_runtime_api.h並鏈接到cuda運行時庫cudart。 (確保cuda include目錄位於include路徑中,並且存儲庫位於庫路徑中,如果使用nvcc進行編譯,將自動處理這個庫。)