修改 CUDA 和 cpp 生成文件

Modifying CUDA and cpp Makefile

本文关键字:文件 cpp CUDA 修改      更新时间:2023-10-16

我正在尝试修改我的makefile以支持.cpp和.cu,但是,我不断收到错误,例如:

/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o(.text+0x20): error: undefined reference to 'main'
hostCode.o:displayfunc.cpp:function readScene(char*): error: undefined reference to 'camera'
hostCode.o:displayfunc.cpp:function readScene(char*): error: undefined reference to 'camera'
hostCode.o:displayfunc.cpp:function readScene(char*): error: undefined reference to 'camera'
hostCode.o:displayfunc.cpp:function readScene(char*): error: undefined reference to 'camera'
hostCode.o:displayfunc.cpp:function readScene(char*): error: undefined reference to 'sphereCount'
hostCode.o:displayfunc.cpp:function readScene(char*): error: undefined reference to 'sphereCount'
hostCode.o:displayfunc.cpp:function readScene(char*): error: undefined reference to 'sphereCount'
hostCode.o:displayfunc.cpp:function readScene(char*): error: undefined reference to 'spheres'
hostCode.o:displayfunc.cpp:function readScene(char*): error: undefined reference to 'spheres'
hostCode.o:displayfunc.cpp:function readScene(char*): error: undefined reference to 'sphereCount'
hostCode.o:displayfunc.cpp:function idleFunc(): error: undefined reference to 'updateRendering()'
hostCode.o:displayfunc.cpp:function reshapeFunc(int, int): error: undefined reference to 'reInitCamera(bool)'
hostCode.o:displayfunc.cpp:function keyFunc(unsigned char, int, int): error: undefined reference to 'reInitCamera(bool)'

生成文件

CXX = g++
NVCC = nvcc -ccbin $(CXX)

INCLUDES := -I/home/cuda_app/inc/
LDFLAGS = -lGL -lGLU -lglut -lpthread

ALL:= test
test:    hostCode.o deviceCode.o
        $(NVCC) $(INCLUDES) -o $@ $< $(LDFLAGS)
deviceCode.o: SmallPtCUDA.cu
        $(NVCC) $(INCLUDES) -o $@ -c $< $(LDFLAGS)

hostCode.o: displayfunc.cpp
        $(CXX) $(INCLUDES) -o $@ -c $< $(LDFLAGS)
clean:
        rm -rf  *.o  $(ALL)

如何同时编译.cpp.cu

有人可以帮忙吗?谢谢

在询问有关生成错误的问题时,最好不仅包括错误,还包含调用编译器或链接器的命令。 有了这样的错误,问题就在那里;查看错误消息很有帮助,但不是确定的。

在您的情况下,问题是您的链接命令在生成文件中不正确:

test:    hostCode.o deviceCode.o
        $(NVCC) $(INCLUDES) -o $@ $< $(LDFLAGS)

您在此处使用$<,它仅扩展到第一个先决条件。 如果您包含链接行并对其进行检查,您将看到链接行上不存在deviceCode.o文件。 您希望链接命令如下所示:

test:    hostCode.o deviceCode.o
        $(NVCC) $(INCLUDES) -o $@ $^ $(LDFLAGS)

使用扩展到所有先决条件的$^

另外,请注意,按照惯例,LDFLAGS包含链接器选项,如-LLDLIBS用于链接器选项,如-l。 但是,您的设置将起作用(它不是传统的)。