gpt4 book ai didi

Cuda C - 链接器错误 - undefined reference

转载 作者:太空狗 更新时间:2023-10-29 16:46:01 25 4
gpt4 key购买 nike

我很难编译一个只有两个文件的简单 cuda 程序。

main.c 看起来像这样:

#include "my_cuda.h"

int main(int argc, char** argv){
dummy_gpu();
}

cuda.h 看起来像这样:

#ifndef MY_DUMMY
#define MY_DUMMY

void dummy_gpu();

#endif

my_cuda.cu 文件如下所示:

#include <cuda_runtime.h>
#include "my_cuda.h"

__global__ void dummy_gpu_kernel(){
//do something
}

void dummy_gpu(){
dummy_gpu_kernel<<<128,128>>>();
}

但是如果我编译我总是会收到以下错误:

gcc  -I/usr/local/cuda/5.0.35/include/ -c main.c
nvcc -c my_cuda.cu
gcc -L/usr/local_rwth/sw/cuda/5.0.35/lib64 -lcuda -lcudart -o md.exe main.o my_cuda.o
main.o: In function `main':
main.c:(.text+0x15): undefined reference to `dummy_gpu'
collect2: ld returned 1 exit status

感谢您的帮助。

最佳答案

您遇到符号名称重整问题。 nvcc 使用主机 C++ 编译器编译主机代码,这意味着符号 name mangling应用于 CUDA 工具链发出的代码。

这个问题有两种解决方案。第一种是使用 C 链接定义 dummy_gpu,因此将 my_cuda.cu 更改为如下内容:

extern "C" {
#include "my_cuda.h"
}

.....


extern "C"
void dummy_gpu(){
dummy_gpu_kernel<<<128,128>>>();
}

请注意,您需要将链接命令更改为:

gcc -L/usr/local_rwth/sw/cuda/5.0.35/lib64 -o md.exe main.o my_cuda.o -lcuda -lcudart 

因为 CUDA 共享库需要在使用它们的对象文件之后指定。

您的第二种选择是使用 g++nvcc 进行链接,在这种情况下,整个问题应该会消失。

关于Cuda C - 链接器错误 - undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com