我正在尝试修改我的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
?
有人可以帮忙吗?感谢
答案 0 :(得分:1)
在询问有关构建错误的问题时,最好不仅包括错误,还包括调用编译器或链接器的命令。有这样的错误就存在问题;看到错误消息是有帮助的,但不是确定的。
在您的情况下,问题是您的makefile中的链接命令不正确:
test: hostCode.o deviceCode.o
$(NVCC) $(INCLUDES) -o $@ $< $(LDFLAGS)
您在这里使用的$<
扩展到第一个先决条件。如果您已包含链接行并进行了检查,则您会发现链接行中不存在deviceCode.o
文件。您希望链接命令如下所示:
test: hostCode.o deviceCode.o
$(NVCC) $(INCLUDES) -o $@ $^ $(LDFLAGS)
使用扩展为所有先决条件的$^
。
此外,只是注意按惯例LDFLAGS
包含-L
和LDLIBS
等链接器选项,用于-l
等链接器选项。但是你的设置会起作用(它不是常规的)。