使用g++链接c对象和cuda对象时未定义对fatbinwrap的引用[已关闭]

1l5u6lss  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(173)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

昨天关门了。
Improve this question
我有一些C代码需要用g++编译,还有一些cuda代码,但是当链接时,我得到了这些错误:

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
/usr/bin/ld: link.o: in function `__cudaRegisterLinkedBinary_2ceb028e_14_cuda_matrix_cu_d0d93b85':
link.stub:(.text+0x62): undefined reference to `__fatbinwrap_2ceb028e_14_cuda_matrix_cu_d0d93b85'
/usr/bin/ld: link.o: in function `__cudaRegisterLinkedBinary_466d5f81_19_cuda_activations_cu_1dc8fded':
link.stub:(.text+0xb6): undefined reference to `__fatbinwrap_466d5f81_19_cuda_activations_cu_1dc8fded'
/usr/bin/ld: link.o: in function `__cudaRegisterLinkedBinary_e77cd44a_10_cuda_nn_cu_314b5683':
link.stub:(.text+0x10a): undefined reference to `__fatbinwrap_e77cd44a_10_cuda_nn_cu_314b5683'
/usr/bin/ld: link.o: in function `__cudaRegisterLinkedBinary_cfb7824e_11_main_gpu_cu_main':
link.stub:(.text+0x15e): undefined reference to `__fatbinwrap_cfb7824e_11_main_gpu_cu_main'
collect2: error: ld returned 1 exit status
make: *** [Makefile:32: exec_gpu] Error 1

我找到的所有关于“未定义的fatbinwrap引用”的线程都是关于找不到一些库函数,但在我的情况下,它找不到为我的文件生成的函数,一般的解决方案是“用-lcudadevrt链接”或其他库,但它没有解决我的问题。
我在makefile中这样编译C代码:

CC = /usr/bin/g++
CFLAG = 
%.o: %.c
    ${CC} ${CFLAGS} -c $< -o $@ -lm

然后这样编译我的CUDA代码:

CUDAC = /usr/local/cuda/bin/nvcc
CUDA_FLAGS = 
%.o: %.cu
    ${CUDAC} ${CUDA_FLAGS} -dc $< -o $@

然后我编译cuda对象如下:

link.o: ${CUDA_OBJ}
    ${CUDAC} ${CUDA_FLAGS} --device-link $^ --output-file $@

然后用

exec: ${OBJ} link.o
    ${CC} ${CFLAGS} $^ -o $@ -lm -L<path> -lcuda -lcudart -lcudadevrt
e3bfsja2

e3bfsja21#

好吧,也许我很笨,但我遵循了cuda网站上的例子(在发帖时试图找到它,但没有成功),并以单独的方式链接cuda对象,如下所示:

link.o: ${CUDA_OBJ}
    ${CUDAC} ${CUDA_FLAGS} --device-link $^ --output-file $@

我试着用g++来完成整个链接

exec: ${OBJ} ${CUDA_OBJ}
    ${CUDAC} ${CUDA_FLAGS} $^ -o $@ -lm -L<path> -lcuda -lcudart -lcudadevrt

它现在起作用了

相关问题