使用CMake構建我的項目我收到以下鏈接器錯誤,不知道如何解決它。使用make VERBOSE=1
揭示看起來OK我生成的命令:對符號'cudaStreamCreate'的未定義引用
[email protected]:~/code/myproject/build_debug$ /usr/bin/c++ -Wall -Wextra -Wshadow -Woverloaded
-virtual -g3 -ggdb3 -fopenmp CMakeFiles/mymain.dir/main/cpp
/algorithm/mymain.cc.o -o mymain -rdynamic
my_library.a /opt/dev/boost/lib/libboost_filesystem.a /opt/dev/boost
/lib/libboost_graph.a /opt/dev/boost/lib/libboost_system.a /opt/dev/boost
/lib/libboost_program_options.a /opt/dev/boost/lib/libboost_chrono.a /usr/local
/hdf5/lib/libhdf5.so -lz -lrt -ldl -lm /usr/local/cuda-5.0/lib64/libcudart.so -lcuda
/usr/local/cuda-5.0/lib64/libcublas.so /opt/dev/magma/1.4.0-beta2/lib/libmagma.a
/opt/intel/lib/intel64/libimf.so -Wl,-rpath,/usr/local/hdf5/lib:/usr/local/cuda-
5.0/lib64:/opt/intel/lib/intel64/usr/bin/ld:/usr/local/cuda-5.0/lib64/libcublas.so:
和鏈接器錯誤:
undefined reference to symbol 'cudaStreamCreate'
/usr/bin/ld: note: 'cudaStreamCreate' is defined in DSO /usr/local/cuda-5.0/lib64/libcudart.so so try adding it to the linker command line
/usr/local/cuda-5.0/lib64/libcudart.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
鏈接器錯誤消息告訴你*完全*要解決這個問題。不要將共享庫指定爲文件,將它們傳遞給忽略它們的編譯器。對每個庫使用'-l'(即''-lcuda',就像你已經在做libcuda一樣)。我不能告訴你如何在Cmake中做到這一點,但這是該問題的根源。 – talonmies
確定你的libcudart.so路徑是/usr/local/cuda-5.0/lib64/libcudart.so?檢查這是因爲大部分時間它的/usr/local/cuda/lib64/libcudart.so –
@SagarMasuti:讀取錯誤信息。它在那裏,編譯器甚至說它可以找到它,但它應該被鏈接。 – talonmies