我意識到這已經被問了很多,但我一直在試圖調試這一天,並且我還沒有找到解決方案,這將解決我的問題。Cmake在編譯時找不到-lcudart
所以,我有一個makefile:
if(GPU)
# set(CUDA_HOST_COMPILER /usr/bin/gcc-4.8)
find_package(CUDA QUIET)
if(CUDA_FOUND)
include_directories(${CUDA_INCLUDE_DIRS})
message(STATUS "CUDA detected")
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
set(BUILD_SHARED_LIBS OFF)
set(CUDA_HOST_COMPILER g++)
set(CUDA_SEPARABLE_COMPILATION ON)
file(GLOB CUDA_FILES *.cu)
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_30,code=sm_30;")
CUDA_COMPILE(CU_O ${CUDA_FILES})
# SETUP FOR CPP FILES
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
# COMPILE AND LINK
cuda_add_executable(main_test ${CU_O} ${CUDA_LIBRARIES})
message(STATUS "File setup seems ok.")
else()
message(STATUS "NO CUDA DETECTED! GPU-based compilation canceled.")
endif()
endif()
我想單獨編譯.CU文件,並在某些時候把它們合併成一個簡單的靜態庫。我的問題是,在這一點上,我甚至不能編譯一個可執行文件。如果我嘗試僅使用nvcc test.cu -o測試,它會完美編譯,所以這似乎是一個系統級錯誤。
我的嘗試:
分別鏈接cudart有:
ln -s /usr/local/cuda/lib64/libcudart.so /usr/local/lib/
ln -s /usr/local/cuda/lib64/libcudart.a /usr/local/lib/
然後我就翻過this偉大的職位,其中所提出的解決方案是使用$ {CUDA_LIBRARIES}變量,但是這也返回:
Linking CXX executable main_test
/usr/bin/ld: cannot find -lcudart
我也試過樸素簡單:
alias nvcc="nvcc -L/usr/local/cuda/lib64 -lcudart"
但仍然沒有成功。我錯過了明顯的東西嗎?謝謝。
編輯:詳細模式新增:
-- Boost version: 1.54.0
-- Found the following Boost libraries:
-- date_time
-- filesystem
-- system
-- regex
-- iostreams
-- GSL using gsl-config /usr/bin/gsl-config
-- Using GSL from /usr
-- :::OPENMM_INCLUDE_DIR:
-- CUDA detected -- LiSiCa library
-- CUDA_LIBRARIES = /usr/lib/libcudart.so
-- File setup seems ok.
-- Boost version: 1.54.0
-- Found the following Boost libraries:
-- regex
-- Configuring done
-- Generating done
您能否提供CMake嘗試執行的命令?你可以通過運行'VERBOSE = 1 make'來獲得這個細節。另外,''{CUDA_LIBRARIES}'的內容是什麼(例如,在'CMakeLists.txt'中添加'message(STATUS「CUDA_LIBRARIES = $ {CUDA_LIBRARIES}」''並運行'cmake') – piwi
我添加了代碼make的文件,這個帖子是用輸出編輯的 –