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

MacOS下vcpkg安装raylib后链接失败:未定义符号问题求助

解决raylib与C项目链接失败问题

问题背景

已通过vcpkg完成bootstrap、integrate等安装步骤,但C项目始终无法与raylib完成链接,出现符号未定义的链接错误。

环境信息

vcpkg已安装包

glfw3:arm64-osx                                   3.3.9               GLFW is a free, Open Source, multi-platform libr...
raylib:arm64-osx                                  5.0                 A simple and easy-to-use library to enjoy videog...
raylib[use-audio]:arm64-osx                                           Build raylib with audio module
vcpkg-cmake-config:arm64-osx                      2022-02-06#1
vcpkg-cmake:arm64-osx                             2023-05-04

CMake配置

cmake_minimum_required(VERSION 3.24)
set(CMAKE_TOOLCHAIN_FILE "/Users/dev/vcpkg/scripts/buildsystems/vcpkg.cmake")
project(base VERSION 0.1.0 LANGUAGES C)

set(CMAKE_C_STANDARD 11)
message("[TOOLCHAIN] "  ${CMAKE_TOOLCHAIN_FILE})

find_package(raylib CONFIG REQUIRED)

add_executable(base main.c)

if (APPLE)
    target_link_libraries(base PRIVATE raylib "-framework IOKit" "-framework Cocoa" "-framework OpenGL")
else()
    target_link_libraries(base PRIVATE raylib)
endif()

示例代码

#include <stdlib.h>
#include "raylib.h"

int main(void)
{
  // 省略代码
}

链接错误信息

[build] [2/2 100% :: 0.231] Linking C executable src/base
[build] FAILED: src/base 
[build] : && /usr/bin/clang -g -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.0.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names  src/CMakeFiles/base.dir/main.c.o -o src/base  /Users/howardcolin/vcpkg/installed/arm64-osx/debug/lib/libraylib.a  -framework IOKit  -framework Cocoa  -framework OpenGL  -L/Users/howardcolin/vcpkg/installed/arm64-osx/debug/lib/pkgconfig/../../lib -lraylib -lglfw3 -framework Cocoa -framework IOKit -framework CoreFoundation && :
[build] ld: Undefined symbols:
[build]   ___asan_handle_no_return, referenced from:
[build]       _glfwExtensionSupported in libraylib.a[2](context.c.o)
[build]       _glfwSwapBuffers in libraylib.a[2](context.c.o)
[build]       ...
[build] clang: error: linker command failed with exit code 1 (use -v to see invocation)
[build] ninja: build stopped: subcommand failed.

解决方案

错误中的___asan_handle_no_return是AddressSanitizer(ASan)的符号,说明raylib编译时启用了ASan,但你的项目未链接ASan库,导致环境不匹配。以下是三种解决方式:

方案1:禁用ASan重新编译raylib

通过vcpkg移除现有raylib,再以关闭ASan的方式重新安装:

vcpkg remove raylib --clean-after-build
vcpkg install raylib:arm64-osx --no-features --asan=off

方案2:项目中启用ASan

修改CMake配置,给项目添加ASan编译和链接选项,与raylib的编译环境保持一致:
在project指令后添加:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")

方案3:修正CMake链接逻辑并检查triplet配置

  • vcpkg已经自动处理了raylib在MacOS上的framework依赖,无需手动添加-framework IOKit等参数,修改链接部分为:
target_link_libraries(base PRIVATE raylib)
  • 检查vcpkg的arm64-osx triplet配置文件(路径:vcpkg/triplets/arm64-osx.cmake),如果存在set(VCPKG_ENABLE_ASAN ON),注释掉该行后重新安装raylib。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:45:19