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
相关产品推荐
相关产品推荐

