修改 CUDA 和 cpp Makefile
Modifying CUDA and cpp Makefile
我正在尝试修改我的 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
?
有人可以帮忙吗?谢谢
在询问有关构建错误的问题时,最好不仅包括错误,还包括调用编译器或 linker 的命令。有了这样的错误,问题就在那里;查看错误消息会有所帮助,但不是决定性的。
在你的情况下,问题是你的 link 命令在你的 makefile 中不正确:
test: hostCode.o deviceCode.o
$(NVCC) $(INCLUDES) -o $@ $< $(LDFLAGS)
您在此处使用 $<
,它仅扩展到 first 先决条件。如果您包含 link 行并检查它,您会发现 deviceCode.o
文件不在 link 行中。您希望 link 命令看起来像这样:
test: hostCode.o deviceCode.o
$(NVCC) $(INCLUDES) -o $@ $^ $(LDFLAGS)
使用 $^
扩展到 所有 先决条件。
此外,请注意,按照惯例 LDFLAGS
包含 linker 选项,如 -L
,LDLIBS
用于 linker 选项,如-l
。但是您的设置会起作用(只是不符合常规)。
我正在尝试修改我的 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
?
有人可以帮忙吗?谢谢
在询问有关构建错误的问题时,最好不仅包括错误,还包括调用编译器或 linker 的命令。有了这样的错误,问题就在那里;查看错误消息会有所帮助,但不是决定性的。
在你的情况下,问题是你的 link 命令在你的 makefile 中不正确:
test: hostCode.o deviceCode.o
$(NVCC) $(INCLUDES) -o $@ $< $(LDFLAGS)
您在此处使用 $<
,它仅扩展到 first 先决条件。如果您包含 link 行并检查它,您会发现 deviceCode.o
文件不在 link 行中。您希望 link 命令看起来像这样:
test: hostCode.o deviceCode.o
$(NVCC) $(INCLUDES) -o $@ $^ $(LDFLAGS)
使用 $^
扩展到 所有 先决条件。
此外,请注意,按照惯例 LDFLAGS
包含 linker 选项,如 -L
,LDLIBS
用于 linker 选项,如-l
。但是您的设置会起作用(只是不符合常规)。