gpt4 book ai didi

c - 与 CUDA 和 GCC 的链接错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:53 27 4
gpt4 key购买 nike

我一直在尝试编译一组 C 和 CUDA 代码。问题出在我制作文件时编译的链接阶段。我制作了一个在主机上执行的包装函数,用于在设备上分配内存、将数据复制到其中并运行内核代码。此外,包装器代码与内核代码包含在同一个文件中。 wrapper 。以下是代码调用函数的方式:

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "LAMMPS.h"

...

main(int argc, char **argv)
{
...
tortuosityTotal = gradient(nbAtoms, topAtoms, bottomAtoms, nTop, nBottom, allConnections, atomlist, ysize);

这是我制作的头文件“LAMMPS.h”中的函数定义:

float gradient(unsigned short nbAtoms, unsigned short *topAtoms,unsigned short
*bottomAtoms, unsigned short nTop, unsigned short nBottom, struct connection
**allConnections,struct atoms *atomlist, double *ysize);

这是我正在使用的生成文件:

all: tortGPU

tortGPU: gradient_kernel.o buildNeighborList.o dumpRead.o tortuosityGPU.c
nvcc tortuosityGPU.c buildNeighborList.o dumpRead.o gradient_kernel.o -lm -o tortGPU
buildNeighborList.o: dumpRead.o buildNeighborList.c
gcc -c buildNeighborList.c
dumpRead.o: dumpRead.c
gcc -c dumpRead.c
gradient_kernel.o:
nvcc -c gradient_kernel.cu -arch=sm_20
clean: rm -rf *.o program

最后,编译步骤工作正常,但是当我将它们全部链接在一起时(使用 tortGPU 的最后一步我收到以下错误消息:

/tmp/tmpxft_000068c7_00000000-1_tortuosityGPU.o: In function `main':
tortuosityGPU.c:(.text+0x520): undefined reference to `gradient'
collect2: ld returned 1 exit status
make: *** [tortGPU] Error 1

我尝试使用带有附加 -L 的 gcc 并得到完全相同的错误代码。谢谢!

最佳答案

虽然该语言通常被称为cuda-C,但更正确的说法是cuda-C++,因为nvcc是一个C++编译器.名为 gradient 的函数正在接受 C++ 名称修改(或者,更准确地说,nvcc 正在查找经过修改的名称)。您可以使用 extern "C" 包装您的声明或将您的代码编译为 C++。

关于c - 与 CUDA 和 GCC 的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11910089/

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