我一直在尝试编译一组 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 并得到完全相同的错误代码。谢谢!