Linux下基于glad的OpenGL项目Makefile链接错误求助
解决OpenGL项目中Glad链接dl库的Makefile问题
你遇到的错误是因为Glad在Linux平台下依赖libdl库,它内部使用了动态链接相关的函数(比如dlclose、dlsym),而你的Makefile里没有把这个库加入链接选项。另外你的run目标里还有个小问题,我一起帮你修正了。
修改后的完整Makefile
UNAME_S := $(shell uname -s) ifeq ($(UNAME_S), Linux) COMPILER = g++ FLAGS = -std=c++1y -pedantic -Wall # 添加-ldl链接libdl库,解决dlclose符号未定义问题 GL_FLAGS = -lGL -lglfw -ldl endif ifeq ($(UNAME_S), Darwin) COMPILER = clang++ FLAGS = -std=c++1y -stdlib=libc++ -pedantic -Wall GL_FLAGS = -lGLEW -framework OpenGL -lm endif FILES = $(wildcard *.cpp) APP_NAME = opengl-app all: main main: $(FILES) $(COMPILER) $(FLAGS) $(FILES) glad.c -o $(APP_NAME) $(GL_FLAGS) .PHONY: clean run clean: rm $(APP_NAME) run: # 修正执行命令,确保从当前目录启动程序 ./$(APP_NAME)
关键改动说明
- Linux平台补充
-ldl链接选项:在GL_FLAGS中加入-ldl,让链接器找到libdl.so库,直接解决dlclose@@GLIBC_2.2.5符号未定义的错误。 - 优化
run目标:原来的run里重复写了执行命令,且第一行opengl-app如果当前目录不在系统PATH中会报错,改为./$(APP_NAME)更可靠,同时使用变量代替硬编码的文件名,后续修改程序名称时不用多处调整。 - 统一
clean目标的变量引用:把rm opengl-app改成rm $(APP_NAME),和定义的变量保持一致,提升Makefile的维护性。
这样修改后,重新执行make就能正常完成编译链接,执行make run也能正确启动你的OpenGL程序了。
内容的提问来源于stack exchange,提问作者Hex
相关产品推荐
相关产品推荐

