[英]C++ Undefined symbols when using folder structure
我目前正在尝试了解OpenGL,并找到了本教程。 我已经达到了想要从我学到的东西做点东西的地步,所以我已经厌倦了用(有点)自制Makefile设置一个小的项目文件夹。 该项目的结构如下:
project_root:
-- Makefile
-- src/
main.cpp
imageloader.cpp
-- obj/
main.o (no compiletime error)
imageloader.o (no compiletime error)
-- include/
imageloader.h
-- textures/
some texture files
Makefile:
CC = g++
SRC_DIR = ./src
OBJ_DIR = ./obj
INC_DIR = ./include
INCLUDE_PATHS = -I/usr/local/include -I/opt/X11/include -I$(INC_DIR)
LIBRARY_PATHS = -L/usr/local/lib -I/opt/X11/lib
LINKER_FLAGS = -framework OpenGL -lGLUT
COMPILER_FLAGS = -w
SRC_FILES = main.cpp imageloader.cpp
HEADER_FILES = imageloader.h
HEADERS = $(HEADER_FILES:%.h=$(INC_DIR)/%.h)
SRC = $(SRC_FILES:%.cpp=$(SRC_DIR)/%.cpp)
OBJS = $(SRC_FILES:%.cpp=$(OBJ_DIR)/%.o)
EXEC = main
$(OBJ_DIR)/%.o: $(SRC)
$(CC) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) -c -o $@ $<
all: $(OBJS) $(HEADERS)
$(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(EXEC)
run:
./main
print:
@echo "C++ objcet files: "$(OBJS)
@echo "C++ source files: "$(SRC)
@echo "C++ header files: "$(HEADERS)
clean:
rm -fv $(EXEC)
rm -fv $(OBJS)
当我尝试对此进行编译时,将得到以下输出:
g++ -I/usr/local/include -I/opt/X11/include -I./include -L/usr/local/lib -I/opt/X11/lib -w -c -o obj/main.o src/main.cpp
g++ -I/usr/local/include -I/opt/X11/include -I./include -L/usr/local/lib -I/opt/X11/lib -w -c -o obj/imageloader.o src/main.cpp
g++ ./obj/main.o ./obj/imageloader.o -I/usr/local/include -I/opt/X11/include -I./include -L/usr/local/lib -I/opt/X11/lib -w -framework OpenGL -lGLUT -o main
Undefined symbols for architecture x86_64:
"loadBMP(char const*)", referenced from:
initRendering() in main.o
initRendering() in imageloader.o
"Image::~Image()", referenced from:
initRendering() in main.o
initRendering() in imageloader.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [all] Error 1
令我困扰的是,这些代码是直接从教程站点获取的,没有任何修改,而当我将它们全部编译在同一文件夹(所有.cpp和.h文件位于同一位置)时,它的编译效果就很好。 我感觉自己犯了一个明显的错误,但是我似乎无法找出导致错误的原因?
有人可以指出为什么无法编译的原因吗?
提前致谢 : )
您要编译main.cpp两次:
g++ -I/usr/local/include -I/opt/X11/include -I./include -L/usr/local/lib -I/opt/X11/lib -w -c -o obj/main.o src/main.cpp <--- main.cpp
g++ -I/usr/local/include -I/opt/X11/include -I./include -L/usr/local/lib -I/opt/X11/lib -w -c -o obj/imageloader.o src/main.cpp <--- main.cpp, instead imageloader.cpp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.