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

M1 Mac平台下使用Conan管理依赖编译GLFW+C++项目失败求助

解决M1 Mac上Conan+CMake构建GLFW/OpenGL项目的链接错误

你在M1 Mac上构建GLFW+OpenGL项目时遇到的两次链接错误,本质都是CMake没有正确处理Conan提供的GLFW依赖路径和链接规则,下面是一步步的针对性解决方法:

问题根源拆解

  1. 第一次错误(未定义GLFW符号):初始CMakeLists.txt仅调用了conan_basic_setup(),但没有明确将GLFW库链接到可执行文件,导致链接器找不到GLFW的函数实现。
  2. 第二次错误(找不到-lglfw3):修改后的配置手动添加了-lglfw3并重复链接了GLFW库和系统框架。Conan已经通过CONAN_PKG::glfw目标封装了所有依赖(包括Mac必需的Cocoa/IOKit等框架),手动添加的-lglfw3会让链接器去系统默认路径找库,而Conan安装的GLFW在本地缓存中,自然找不到。

分步解决方案

步骤1:清理旧构建缓存

先删除现有build目录,避免旧配置干扰:

rm -rf build
mkdir build && cd build

步骤2:修正conanfile.txt

你的代码未用到GLM,移除不必要依赖,同时改用更适配现代CMake的生成器:

[requires]
glfw/3.3.6

[generators]
cmake_find_package
cmake_paths

步骤3:正确配置CMakeLists.txt

使用Conan现代集成方式,让CMake自动处理依赖路径和链接规则:

cmake_minimum_required(VERSION 3.22)
project(opengl-by-glfw)

# 配置C++标准(你的代码用C++11也可,推荐更新版本)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 引入Conan生成的配置文件
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH})
set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR} ${CMAKE_PREFIX_PATH})

# 下载Conan CMake集成脚本(本地无则自动下载)
if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
    message(STATUS "Downloading conan.cmake from conan-io/cmake-conan")
    file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.17.0/conan.cmake"
         "${CMAKE_BINARY_DIR}/conan.cmake"
         EXPECTED_HASH SHA256=396e16d0f5eabdc6a14afddbcfff62a54a7ee75c6da23f32f7a31bc85db23484
         TLS_VERIFY ON)
endif()
include(${CMAKE_BINARY_DIR}/conan.cmake)

# 自动检测M1架构并安装依赖
conan_cmake_autodetect(settings)
conan_cmake_run(CONANFILE ../conanfile.txt
                BASIC_SETUP NO_OUTPUT_DIRS
                CMAKE_TARGETS
                BUILD missing
                SETTINGS ${settings})

# 查找依赖
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)

# 创建可执行文件并链接依赖
add_executable(opengl-by-glfw src/main.cpp)
target_link_libraries(opengl-by-glfw
    PRIVATE
        OpenGL::GL
        glfw
)

# 导出编译命令(可选,用于代码编辑器LSP)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

步骤4:执行构建命令

在build目录下依次运行:

# 生成CMake配置
cmake -G Ninja ..

# 编译项目
ninja

M1 Mac额外适配(若仍有架构问题)

如果Conan出现架构不匹配,手动创建M1专属profile:

  1. 在~/.conan/profiles/下创建arm64文件,内容如下:
[settings]
os=Macos
os.version=12.1
arch=armv8
compiler=apple-clang
compiler.version=13.0
compiler.cppstd=17
build_type=Release
  1. 构建时指定该profile:
conan_cmake_run(CONANFILE ../conanfile.txt
                BASIC_SETUP NO_OUTPUT_DIRS
                CMAKE_TARGETS
                BUILD missing
                PROFILE arm64)

验证运行

编译完成后执行:

./bin/opengl-by-glfw

你会看到一个短暂显示的窗口(代码中延迟循环后即终止),无报错则说明构建成功。

内容的提问来源于stack exchange,提问作者javaboy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:02:35