के साथ मुझे सीएमडीए कोड को संकलित करने में समस्याएं हैं। मैं CUDA 7 उपयोग कर रहा हूँ और NVCC से संस्करण जानकारी इस प्रकार है: इस प्रकारसीएमडीए संकलन मुद्दे सीएमके
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2014 NVIDIA Corporation
Built on Tue_Dec__9_18:10:46_CST_2014
Cuda compilation tools, release 7.0, V7.0.17
मेरे CMake फ़ाइल find_cuda मैक्रो का उपयोग करता है:
find_package(CUDA)
if(CUDA_FOUND)
list(APPEND CUDA_NVCC_FLAGS "-arch=sm_20;--compiler-options;-std=c++11;-O2;-DVERBOSE")
endif(CUDA_FOUND)
मैं एसटीडी = C++ 11 संकलक झंडा जोड़ा कई पदों के बाद सुझाव दिया गया कि इसकी आवश्यकता थी। हालांकि, मुझे इस ध्वज के साथ या उसके बिना बिल्कुल वही त्रुटियां मिलती हैं।
मैंने एनवीसीसी संकलन झंडे से सी ++ 11 समर्थन को हटाने के लिए निम्नलिखित भी जोड़ा, लेकिन यह कुछ भी नहीं बदलता है। इस प्रकार
if(CMAKE_COMPILER_IS_GNUCC)
string(REPLACE "-std=c++11" "" CUDA_HOST_FLAGS "${CUDA_HOST_FLAGS}")
string(REPLACE "-std=c++0x" "" CUDA_HOST_FLAGS "${CUDA_HOST_FLAGS}")
endif(CMAKE_COMPILER_IS_GNUCC)
त्रुटियों मैं कर रहे हैं:
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h(432): error: identifier "nullptr" is undefined
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h(432): error: expected
a ";"
/usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h(190): error:
expected a ";"
/usr/include/c++/4.8/exception(63): error: expected a ";"
/usr/include/c++/4.8/exception(68): error: expected a ";"
/usr/include/c++/4.8/exception(76): error: expected a ";"
/usr/include/c++/4.8/exception(83): error: expected a ";"
/usr/include/c++/4.8/exception(93): error: expected a "{"
/usr/include/c++/4.8/bits/exception_ptr.h(64): error: function
"std::current_exception" returns incomplete type
"std::__exception_ptr::exception_ptr"
मैं जीसीसी 4.8 का उपयोग कर रहा है, लेकिन साथ ही 4.7 के साथ एक ही त्रुटियों मिलता है। मैं cmake 2.8.12.2 पर हूँ।
CMake वर्बोज़ साथ संकलन देता NVCC संकलन के लिए निम्नलिखित झंडे:
/usr/local/cuda-7.0/bin/nvcc /home/xargon/Dropbox/code/gpu-mosaicing
/src/gpu/kernels/bgra_2_gray.cu -c -o /home/xargon/code/mosaicing_bin
/gpu/kernels/CMakeFiles/kernels.dir//./kernels_generated_bgra_2_gray.cu.o
-ccbin /usr/bin/cc -m64 -DUSE_CUDA -DUSE_OPENCV -DUSE_QT -Xcompiler
,\"-std=c++11\",\"-O3\",\"-DNDEBUG\" -arch=sm_20 --compiler-options
-std=c++11 -O2 -DVERBOSE -DNVCC -I/usr/local/cuda-7.0/include -I/usr/local
/include/opencv -I/usr/local/include -I/home/xargon/Dropbox/code/gpu-
mosaicing/src/cpu/gui/qt -I/usr/include -I/home/xargon/Dropbox/code/gpu-
mosaicing/src/cpu/core -I/home/xargon/Dropbox/code/gpu-mosaicing/src/cpu
/datasources -I/home/xargon/Dropbox/code/gpu-mosaicing/src/gpu
/intraoperability -I/home/xargon/Dropbox/code/gpu-mosaicing/src/utils
-I/usr/local/cuda-7.0/include
तो, मैं मिलता है: /bgra_2_gray .cu -c -o /home/xargon/code/mosaicing_bin/gpu/kernels/CMakeFiles/kernels.dir//./kernels_generated_bgra_2_gray.cu।o -ccbin/usr/bin/cc-m64 -DUSE_CUDA -DUSE_OPENCV -DUSE_QT -Xcompiler, \ "- std = C++ 11 \", \ "- O3 \", \ "- DNDEBUG \" -arch = sm_20 - -compiler-options -std = C++ 11 -O2 -DVERBOSE -DNVCC – Luca
यह Xcompiler सामान सादा बेवकूफ है। आप pass -std = C++ 11 पास करते हैं, इसलिए यह कोई समस्या नहीं है। – usr1234567
ठीक है, इसलिए समस्या वास्तव में std = C++ 11 ध्वज को निकालना था। इसलिए, मुझे CUDA_PROPAGATE_HOST_FLAGS को बंद करना पड़ा। हालांकि, मैंने सोचा कि क्यूडा 7 सी ++ 11 फीचर्स का समर्थन करता है और मैं सोच रहा था कि क्या हो रहा है। – Luca