You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:32:16