未定义的参考CUDA和CMAKE

时间:2016-03-15 17:59:19

标签: c++ cuda 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退出状态       make [2]: * [vis_3d]错误1       make [1]:* [CMakeFiles / vis_3d.dir / all]错误2       make:*** [all]错误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

1 个答案:

答案 0 :(得分:1)

不是真正的解决方案,但这是由于FindCUDA(cuda的cmake库)中的错误。它并不适用于可分离的编译。 cuda函数的所有定义都在额外链接阶段丢失。

请参阅此处:https://cmake.org/Bug/view.php?id=15157https://stackoverflow.com/a/33233086/2702753

相关问题