未定义的引用 CUDA 和 CMAKE
Undefined reference CUDA and CMAKE
我正在尝试构建一个适用于make的小工具,但我想创建一个cmake文件以供将来使用。我无法弄清楚链接的问题是什么。
cmake_minimum_required(VERSION 3.0)
PROJECT(vis_3d)
#find_package(VTK REQUIRED)
find_package(CUDA REQUIRED)
find_package(GLEW REQUIRED )
find_package(GLUT)
find_package(OpenGL REQUIRED)
set(CUDA_SEPARABLE_COMPILATION ON)
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
set(SOURCE main.cpp )
set(HEADERS interactions.h )
set(KERNEL_S kernel.cu device_funcs.cu )
set(KERNEL_h kernel.h device_funcs.cuh )
include_directories(${vis_3d_SOURCE_DIR})
include_directories(${CUDA_INCLUDE_DIRS}
${OPENGL_INCLUDE_DIRS}
${GLUT_INCLUDE_DIRS}
$(GLEW_INCLUDE_DIRS)
/usr/local/cuda/samples/common/inc
)
CUDA_ADD_LIBRARY(device_funcs device_funcs.cu)
target_link_libraries(device_funcs ${CUDA_LIBRARIES})
CUDA_ADD_LIBRARY(kernel_device kernel.cu device_funcs.cu )
target_link_libraries(kernel_device ${CUDA_LIBRARIES})
include_directories(${kernel_device} ${device_funcs})
cuda_add_executable(vis_3d
${SOURCE} ${HEADERS}
${KERNEL_h}
)
#include_directories(${kernel_device} ${device_funcs})
target_link_libraries(vis_3d
#${VTK_LIBRARIES}
${kernel_device} ${device_funcs}
${CUDA_LIBRARIES} ${OPENGL_LIBRARIES} ${GLUT_LIBRARY}
${GLEW_LIBRARIES} -lglut -lGL -lGLU -lGLEW
)
错误
[ 90%] 链接 CXX 可执行文件vis_3d CMakeFiles/vis_3d.dir/main.cpp.o: 在函数
mymenu(int)': main.cpp:(.text+0x8b): undefined reference to
volumeKernelLauncher(float*, int3, int, float4)' CMakeFiles/vis_3d.dir/main.cpp.o:在函数render()': main.cpp:(.text+0x385): undefined reference to
kernelLauncher(uchar4*, float*, int, int, int3, int, int, float, 浮子,浮子)' CMakeFiles/vis_3d.dir/main.cpp.o: 在函数main': main.cpp:(.text+0x699): undefined reference to
volumeKernelLauncher(float*, int3, int, float4)' collect2:错误:ld 返回 1 个退出状态 制造[2]: * [vis_3d] 错误 1 make[1]: * [CMakeFiles/vis_3d.dir/all] 错误 2 制造: *** [全部] 错误 2
制作文件
UNAME_S := $(shell uname)
ifeq ($(UNAME_S), Darwin)
LDFLAGS = -Xlinker -framework,OpenGL -Xlinker -framework,GLUT
else
LDFLAGS += -L/usr/local/cuda/samples/common/lib/linux/x86_64
LDFLAGS += -lglut -lGL -lGLU -lGLEW
endif
NVCC = /usr/local/cuda/bin/nvcc
NVCC_FLAGS=-Xcompiler "-Wall -Wno-deprecated-declarations" -rdc=true
INC = -I/usr/local/cuda/samples/common/inc
all: main.exe
main.exe: main.o kernel.o device_funcs.o
$(NVCC) $^ -o $@ $(LDFLAGS)
main.o: main.cpp kernel.h interactions.h
$(NVCC) $(NVCC_FLAGS) -c $< -o $@
kernel.o: kernel.cu kernel.h device_funcs.cuh
$(NVCC) $(NVCC_FLAGS) $(INC) -c $< -o $@
device_funcs.o: device_funcs.cu device_funcs.cuh
$(NVCC) $(NVCC_FLAGS) $(INC) -c $< -o $@
clean:
rm -f *.o *.exe
这不是一个真正的解决方案,但这是由于FindCUDA(cuda的cmake库)中的一个错误。它不适用于可分离的编译。cuda 函数的所有定义在额外链接阶段都会丢失。
看这里: https://cmake.org/Bug/view.php?id=15157 和 https://stackoverflow.com/a/33233086/2702753
- 如何使用CMake将C++编译为CUDA
- 链接器错误-在ubuntu中找不到CMake和Cuda 10.1的lcudart
- 使用Cmake进行简单的CUDA程序
- 编译/添加 cuda 代码到现有项目 (CMake)
- CMake + CUDA "invalid device function"即使使用正确的 SM 版本
- cmake cuda在Windows上单独的编译静态LIB链接错误,但在Ubuntu上没有
- CMAKE和CUDA的权限误差
- Clang 4.0.0 Cuda和Cmake最小警告的最佳实践
- 基于CMAKE的CUDA应用程序的构建失败 - 没有传递给链接器的文件
- 使用 CMake 为 CUDA 进行多配置/多平台构建
- 在CMake中链接CUDA库
- CMAKE重新运行由于CUDA生成的文件
- 为什么CMAKE add_依赖项不适用于使用CUDA代码的库
- CMAKE中断openCV建筑物具有CUDA支持而没有错误
- 如何设置CMake以便与Visual Studio 2017RC和CUDA 8.0一起使用
- 使用CMAKE编译CUDA C++-指定了多个编译阶段
- 带有 CUDA 的 CMake:用不必要的引号 (\) 括起来的 ccbin
- 如何让cmake找到CUDA
- CMake + Cuda:在 Cuda-mode (--x=cu) 下编译 cpp 文件
- 未定义的引用 CUDA 和 CMAKE