如何在Mac M1的VS Code中链接GLEW(OpenGL)库
在Mac上为C++项目添加GLEW库并更新Makefile的问题
问题描述
我正在用C++开发项目,已经成功链接GLFW库,但不知道如何添加GLEW库:
- 从GLEW官网下载通用压缩包解压后,只有头文件,库文件夹是空的;官网仅提供Windows版本下载链接,虽说明支持Mac但无对应安装包
- 看到他人代码仓库的依赖文件夹lib子目录里有GLEW库文件,因此确认Mac版本应有对应的库文件
- 同时不确定如何修改当前的Makefile来正确链接GLEW
当前Makefile代码
CXX = g++ OUTPUT = app CXX_FILES = $(wildcard ./src/*.cpp) CXX_FLAGS = -Wall -g -std=c++17 -DGL_SILENCE_DEPRECATION LIB_DIR = src/vendors/lib INCLUDE_DIR = src/vendors/include # Adjusting LDFLAGS LDFLAGS = -lpthread -lglfw.3 -lGlew -framework Cocoa -framework OpenGL -framework IOKit all: $(OUTPUT) $(OUTPUT): $(CXX_FILES:.cpp=.o) $(CXX) $(CXX_FLAGS) -o $@ $^ -L$(LIB_DIR) $(LDFLAGS) -Wl,-rpath,$(LIB_DIR) %.o: %.cpp $(CXX) $(CXX_FLAGS) -c -o $@ $< -I $(INCLUDE_DIR) clean: rm -f $(OUTPUT) $(CXX_FILES:.cpp=.o)
文件存储结构
附当前项目文件存储结构截图
解决方案
1. 获取Mac版GLEW库文件
有两种可行方式:
方式一:用Homebrew安装(推荐)
打开终端执行以下命令,Homebrew会自动安装适配Mac的GLEW头文件和库文件到系统默认目录:
brew install glew
方式二:手动编译GLEW
- 从官网下载通用压缩包并解压
- 终端进入解压后的目录,执行编译命令:
make - 编译完成后,目录下会生成
libGLEW.a(静态库)或libGLEW.dylib(动态库) - 将头文件复制到项目的
src/vendors/include/GL目录,库文件复制到src/vendors/lib目录
2. 更新Makefile
根据安装方式调整Makefile:
情况一:Homebrew安装的GLEW
GLEW的头文件和库文件已在系统目录,无需额外指定LIB_DIR,只需修正链接参数的大小写(Mac上GLEW的链接参数为-lGLEW而非-lGlew),修改后的Makefile如下:
CXX = g++ OUTPUT = app CXX_FILES = $(wildcard ./src/*.cpp) CXX_FLAGS = -Wall -g -std=c++17 -DGL_SILENCE_DEPRECATION # 保留GLFW的头文件路径 INCLUDE_DIR = src/vendors/include LDFLAGS = -lpthread -lglfw.3 -lGLEW -framework Cocoa -framework OpenGL -framework IOKit all: $(OUTPUT) $(OUTPUT): $(CXX_FILES:.cpp=.o) $(CXX) $(CXX_FLAGS) -o $@ $^ $(LDFLAGS) %.o: %.cpp $(CXX) $(CXX_FLAGS) -c -o $@ $< -I $(INCLUDE_DIR) clean: rm -f $(OUTPUT) $(CXX_FILES:.cpp=.o)
情况二:手动复制库到项目目录
确保库文件已放入src/vendors/lib,头文件在src/vendors/include/GL,只需修正链接参数的大小写即可,修改后的Makefile如下:
CXX = g++ OUTPUT = app CXX_FILES = $(wildcard ./src/*.cpp) CXX_FLAGS = -Wall -g -std=c++17 -DGL_SILENCE_DEPRECATION LIB_DIR = src/vendors/lib INCLUDE_DIR = src/vendors/include # 修正GLEW的链接参数为-lGLEW LDFLAGS = -lpthread -lglfw.3 -lGLEW -framework Cocoa -framework OpenGL -framework IOKit all: $(OUTPUT) $(OUTPUT): $(CXX_FILES:.cpp=.o) $(CXX) $(CXX_FLAGS) -o $@ $^ -L$(LIB_DIR) $(LDFLAGS) -Wl,-rpath,$(LIB_DIR) %.o: %.cpp $(CXX) $(CXX_FLAGS) -c -o $@ $< -I $(INCLUDE_DIR) clean: rm -f $(OUTPUT) $(CXX_FILES:.cpp=.o)
注意事项
- GLEW在Mac上的库名称为
libGLEW,链接时必须使用-lGLEW(全大写),原Makefile中的-lGlew会导致链接失败 - 手动编译时,若出现编译错误,可尝试添加
CFLAGS=-arch x86_64或CFLAGS=-arch arm64参数适配Mac的CPU架构
内容的提问来源于stack exchange,提问作者jerry
相关产品推荐
相关产品推荐

