动态并行性-编译时未定义对uuu cudaRegisterLinkedBinary的引用链接错误-单独编译 当我尝试编译一个简单的代码时,我遇到了一个问题,C++和CUDA代码是用分离的方式编译的。

动态并行性-编译时未定义对uuu cudaRegisterLinkedBinary的引用链接错误-单独编译 当我尝试编译一个简单的代码时,我遇到了一个问题,C++和CUDA代码是用分离的方式编译的。,cuda,Cuda,这是我的密码 main.cpp: #include "file.cuh" int main( void ) { test(); return 0; } file.cuh: void test( void ); file.cu: #include <cuda.h> #include <cuda_runtime.h> #include <cstdio> #include "file.cuh" __global__ void print

这是我的密码

main.cpp:

#include "file.cuh"

int main( void )
{
     test();
     return 0;
}
file.cuh:

void test( void );
file.cu:

#include <cuda.h>
#include <cuda_runtime.h>
#include <cstdio>

#include "file.cuh"

__global__ void printId( void )
{
    printf("Hello from block %d \n", blockIdx.x);
}

__global__ void DynPara( void )
{
    dim3 grid( 2, 1, 1 );
    dim3 block( 1, 1, 1 );

    printId<<< grid, block >>>();
}

void test( void )
{
    dim3 grid( 1, 1, 1 );
    dim3 block( 1, 1, 1 );

    dynPara<<< grid, block >>>();
}
os:红帽 信用卡:K20x

有什么想法吗


谢谢

这个问题几乎是这个问题的翻版

除了编译之外,动态并行还需要可重定位的设备代码链接

您的
nvcc
命令行指定一个仅编译的操作(
-rdc=true-c

g++
不进行任何设备代码链接。因此,在这样的场景中,当使用
g++
执行最终链接操作时,是必需的

大概是这样的:

nvcc -arch=sm_35 -rdc=true -c file.cu
nvcc -arch=sm_35 -dlink -o file_link.o file.o -lcudadevrt -lcudart
g++ file.o file_link.o main.cpp -L<path> -lcudart -lcudadevrt
nvcc-arch=sm_35-rdc=true-c file.cu
nvcc-arch=sm_35-dlink-o file_link.o file.o-lcudadevrt-lcudart
g++file.o file_link.o main.cpp-L-lcudart-lcudadevrt

使用CMake时,在
find\u package()之前设置
CUDA\u SEPARABLE\u COMPILATION
,可同时启用可重定位设备代码编译和链接:

SET(CUDA_SEPARABLE_COMPILATION ON)
find_package(CUDA QUIET REQUIRED)

不知道为什么,但这对我来说没什么区别。我不得不改用这房子。
nvcc -arch=sm_35 -rdc=true -c file.cu
nvcc -arch=sm_35 -dlink -o file_link.o file.o -lcudadevrt -lcudart
g++ file.o file_link.o main.cpp -L<path> -lcudart -lcudadevrt
SET(CUDA_SEPARABLE_COMPILATION ON)
find_package(CUDA QUIET REQUIRED)