0

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

#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);

这是我正在使用的makefile:

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 并得到完全相同的错误代码。谢谢!

4

1 回答 1

3

尽管该语言经常被称为,但将其称为C++ 编译器cuda-C更为正确。命名的函数正受到 C++ 名称重整(或者,更准确地说,正在寻找重整名称)。您可以使用 C++ 包装您的声明或将您的代码编译为 C++。cuda-C++nvccgradientnvccextern "C"

于 2012-08-10T22:34:53.490 回答