簡體   English   中英

使用文件夾結構時的C ++未定義符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM