我在使用 cuda c 进行单独编译时遇到问题。 我有2个文件。 nsim.cu 和methods.cu。
在我的methods.cu 文件中,我拥有所有内核函数“__global __” 我的 nsim.cu 调用这些函数。我的问题是,当尝试调用对象文件中的方法时,我得到一个
error : "identifier "MyMethod" is undefined"
这是我使用 nvcc 的方式:
NVCC= /usr/local/cuda-5.5/bin/nvcc
NVCCFLAGS= -arch=sm_35 -dc
LIBS= -lglut -lGL -lcurand
OBJECTS = nsim.o methods.o
go:
rm -f ${OBJECTS}
${NVCC} ${NVCCFLAGS} methods.cu ${LIBS}
${NVCC} ${NVCCFLAGS} nsim.cu ${LIBS}
${NVCC} ${NVCCFLAGS} ${OBJECTS} -o nsim
nsim.cu 包含我的主要方法,并且是在编译时抛出错误的地方
感谢您的任何意见!
最佳答案
我通过将所有设备功能移动到单独的目标文件中,然后使用 lcudadebrt 库进行编译来解决了我的问题。我的新 makefile 如下所示:
NVCC= /usr/local/cuda-5.5/bin/nvcc
NVCCFLAGS= -arch=sm_35
LIBS= -lglut -lGL -lcurand -lcudadevrt
OBJECTS = nsim.o cuda0.o cuda1.o cuda2.o cuda3.o cuda4.o
go:
rm -f ${OBJECTS}
${NVCC} ${NVCCFLAGS} -dc cuda0.cu ${LIBS}
${NVCC} ${NVCCFLAGS} -dc cuda1.cu ${LIBS}
${NVCC} ${NVCCFLAGS} -dc cuda2.cu ${LIBS}
${NVCC} ${NVCCFLAGS} -dc cuda3.cu ${LIBS}
${NVCC} ${NVCCFLAGS} -dc cuda4.cu ${LIBS}
${NVCC} ${NVCCFLAGS} -dc nsim.cu ${LIBS}
${NVCC} ${NVCCFLAGS} ${OBJECTS} -o nsim ${LIBS}
关于cuda单独编译 "undefined methods",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23176377/