使用Cuda对象链接与Cmake
Using Cuda Object Linking with Cmake
现在我正在做一个使用Cuda 5的对象链接功能的项目。由于项目开始变得复杂,我想切换到使用cmake来编译代码。然而,我似乎不能让对象链接为我正确工作。
我最终创建了一个项目的玩具版本,它得到了与原始项目相同的错误。这个玩具项目由一个主文件(TextureMain.cu)组成,它调用内核函数在GPU上运行。在每个GPU线程中引用一个用户定义类(TextureFunc)的实例,该类存在于与主文件分开的文件夹中。这个类由一个TextureFunc组成。
以下是我使用的CMakeList.txt文件:
项目目录(包含src目录):
project(TextureMain)
cmake_minimum_required(VERSION 2.8)
find_package(CUDA REQUIRED)
#-------------------------------------------------------------------------------
set(CUDA_NVCC_FLAGS "-arch=compute_20; -code=sm_20; -rdc=true; -lcudadevrt")
include_directories(src/TextureFunc)
#-------------------------------------------------------------------------------
add_subdirectory(src/TextureFunc)
add_subdirectory(src)
在src目录中(包含TextureMain)。目录):
cuda_add_executable(TextureMain TextureMain.cu)
target_link_libraries(TextureMain TextureFunc)
install(TARGETS TextureMain DESTINATION bin)
在texturefuncc目录(包含texturefunch和texturefuncu):
cuda_add_library(TextureFunc TextureFunc.cu )
target_link_libraries(TextureFunc)
当我尝试使用上面的CMakeList.txt文件编译这段代码时,我得到以下错误:
Linking CXX executable TextureMain
CMakeFiles/TextureMain.dir/./TextureMain_generated_TextureMain.cu.o: In function `__sti____cudaRegisterAll_46_tmpxft_00004c15_00000000_6_TextureMain_cpp1_ii_texRef':
/tmp/tmpxft_00004c15_00000000-3_TextureMain.cudafe1.stub.c:2: undefined reference to `__cudaRegisterLinkedBinary_46_tmpxft_00004c15_00000000_6_TextureMain_cpp1_ii_texRef'
TextureFunc/libTextureFunc.a(TextureFunc_generated_TextureFunc.cu.o): In function `__sti____cudaRegisterAll_46_tmpxft_00004bd8_00000000_6_TextureFunc_cpp1_ii_421ca072':
/tmp/tmpxft_00004bd8_00000000-3_TextureFunc.cudafe1.stub.c:8: undefined reference to `__cudaRegisterLinkedBinary_46_tmpxft_00004bd8_00000000_6_TextureFunc_cpp1_ii_421ca072'
collect2: ld returned 1 exit status
make[2]: *** [src/TextureMain] Error 1
make[1]: *** [src/CMakeFiles/TextureMain.dir/all] Error 2
这显然是一个链接错误,它可能与我使用cmake编译代码的方式有关。我认为nvcc的标志是正确的,因为我能够使用具有相同标志的Makefile来编译这个项目。然而,我不确定我还做错了什么。我确实注意到错误信息引用了一些不存在的。cpp文件,但我不知道该怎么办。
如能提供任何建议,我将不胜感激。我使用的是cmake 2.8.8版本如何使用' 将${CUDA_LIBRARIES}
链接到任何目标。铜文件?
例如,在你的src目录中,你可以尝试:
cuda_add_executable(TextureMain TextureMain.cu)
target_link_libraries(TextureMain TextureFunc ${CUDA_LIBRARIES})
install(TARGETS TextureMain DESTINATION bin)
相关文章:
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 将 SDL2 与 CMake 链接起来
- 找不到 CMake 链接的库
- 无法将 GTest 中的类与 CMake 链接
- NDK 将库与 cmake 链接
- 无法将提升库与 CMake 链接
- 如何使用 CMake 链接"numpy/arrayobject.h"
- CMake链接库在Docker映像中失败
- 使用cmake链接错误
- 如何使用CMake链接顶点?
- 无法在VS2017上将libclang与cmake链接
- 将枚举与 CMake 链接的正确方法是什么?
- 如何使用 cmake 链接库
- 将boost_numpy3与 CMAKE 链接
- CMake 链接 2 个具有相对路径的库
- Ogre 3D共享库与CMAKE链接时,在Linux上执行二进制时找不到
- 在 Android Studio 中使用 NDK、Gradle 和 CMake 链接外部库
- cmake链接错误2
- 无法通过 CMake 链接 Boost 1.63.0
- Android Native:CMake 链接错误:未定义对 GL 函数的引用 - 即使包含并链接了 EGL 和 GLESv3