我目前正在为我的gamedev项目编写makefile文件,并设法将所有内容编译到一个静态库bingus.a
-我的引擎中。我现在正在尝试构建一个示例程序,但我发现我的FreeType静态库链接不正确。
下面是make命令的输出
C:\Projects\Games\bingus>make examples
g++ -o hello_window -Wall -Iinclude -Isrc examples/hello_window.cpp bingus.a -Llib -lglfw3 -lgdi32 -lopengl32 -lfreetype
bingus.a(renderer.o):renderer.cpp:(.text+0x11f): undefined reference to `FT_Init_FreeType'
bingus.a(renderer.o):renderer.cpp:(.text+0x234d): undefined reference to `FT_New_Face'
bingus.a(renderer.o):renderer.cpp:(.text+0x23b2): undefined reference to `FT_Set_Pixel_Sizes'
bingus.a(renderer.o):renderer.cpp:(.text+0x23ee): undefined reference to `FT_Load_Char'
bingus.a(renderer.o):renderer.cpp:(.text+0x25f0): undefined reference to `FT_Load_Char'
bingus.a(renderer.o):renderer.cpp:(.text+0x281f): undefined reference to `FT_Done_Face'
collect2.exe: error: ld returned 1 exit status
make: *** [hello_window] Error 1
下面是我的Makefile的全部内容
# Define target platform
PLATFORM ?= DESKTOP
# Define paths
SOURCE_PATH ?= src
INCLUDE_PATH ?= include
LIB_PATH ?= lib
EXAMPLES_PATH ?= examples
OUTPUT_PATH ?= out
#Define includes
BINGUS_INCLUDES = -I$(INCLUDE_PATH) \
-I$(SOURCE_PATH)
#Define engine object files
BINGUS_SRCS = $(SOURCE_PATH)/bingus.cpp \
$(SOURCE_PATH)/debug.cpp \
$(SOURCE_PATH)/entity.cpp \
$(SOURCE_PATH)/glad.c \
$(SOURCE_PATH)/input.cpp \
$(SOURCE_PATH)/math.cpp \
$(SOURCE_PATH)/renderer.cpp \
$(SOURCE_PATH)/shader.cpp \
$(SOURCE_PATH)/texture.cpp \
$(SOURCE_PATH)/ui.cpp \
$(SOURCE_PATH)/window.cpp
BINGUS_OBJS = bingus.o \
debug.o \
entity.o \
glad.o \
input.o \
math.o \
renderer.o \
shader.o \
texture.o \
ui.o \
window.o
# Define compiler vars
CC = g++
AR = ar
CFLAGS = -Wall
ifeq ($(PLATFORM), WEB)
# Compile with emscripten - untested as yet
CC = emcc
AR = emar
endif
bingus.a: $(BINGUS_OBJS)
$(AR) cr $@ $^
bingus.o: $(SOURCE_PATH)/bingus.cpp
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
debug.o: $(SOURCE_PATH)/debug.cpp
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
entity.o: $(SOURCE_PATH)/entity.cpp
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
glad.o: $(SOURCE_PATH)/glad.c
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
input.o: $(SOURCE_PATH)/input.cpp
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
math.o: $(SOURCE_PATH)/math.cpp
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
renderer.o: $(SOURCE_PATH)/renderer.cpp
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
shader.o: $(SOURCE_PATH)/shader.cpp
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
texture.o: $(SOURCE_PATH)/texture.cpp
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
ui.o: $(SOURCE_PATH)/ui.cpp
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
window.o: $(SOURCE_PATH)/window.cpp
$(CC) $(CFLAGS) $< -c $(BINGUS_INCLUDES)
examples: hello_window
hello_window: $(EXAMPLES_PATH)/hello_window.cpp bingus.a
$(CC) -o $@ $(CFLAGS) $(BINGUS_INCLUDES) $^ -L$(LIB_PATH) -lglfw3 -lgdi32 -lopengl32 -lfreetype
我试着检查g++命令中参数的顺序,但我觉得顺序似乎是正确的。我尝试链接的所有库都是使用Visual Studio单独编译的。我的库位于我的项目目录中的lib/文件夹下,名为libglfw3.a
和libfreetype.a
- glfw不会引发链接错误,因此可能工作正常。
1条答案
按热度按时间pkln4tw61#
正如评论所建议的,问题是我试图包含用不同编译器编译的库,通过使用MinGW编译所有依赖项,我能够修复这个问题。