将错误与CUDA和GCC联系起来

时间:2012-08-10 22:32:02

标签: c gcc cuda nvcc

我一直在尝试编译一组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);

这是头文件中的函数定义&#34; LAMMPS.h&#34;我做了:

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

1 个答案:

答案 0 :(得分:3)

尽管该语言通常称为cuda-C,但将其称为cuda-C++更为正确,因为nvcc是C ++编译器。名为gradient的函数正在进行C ++名称修改(或者更确切地说,nvcc正在查找损坏的名称)。您可以使用extern "C"包装声明,也可以将代码编译为C ++。