MacOS运行CMake生成的可执行文件时缺失libSystem.B.dylib求助
问题:M1 MacOS Ventura 13.1下CMake编译程序运行时dyld库加载失败
运行CMake编译生成的可执行文件时出现以下错误:
dyld[5005]: dyld cache '(null)' not loaded: syscall to map cache into shared region failed dyld[5005]: Library not loaded: /usr/lib/libSystem.B.dylib Referenced from: <7EB1C677-BB05-338C-8B29-CC2803CB8C21> /Users/pop/Desktop/Lang Reason: tried: '/usr/lib/libSystem. " B.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/lib/libSystem.B.dylib' (no such file), '/usr/lib/libSystem. B.dylib' (no such file, no dyld cache), '/usr/local/lib/libSystem. B.dylib' (no such file)
使用的CMake配置文件如下:
cmake_minimum_required(VERSION 3.0 FATAL_ERROR) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) project(App) set(programName App) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeFiles/") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") set(CMAKE_C_COMPILER "clang") set(CMAKE_CXX_COMPILER "clang++") file(GLOB SRC "src/*/*.c" "src/*/*.h" "src/*.c") add_executable(App ${SRC})
项目仅包含一个Hello World的C文件和若干空目录,已尝试执行sudo find / -name libSystem.B.dylib查找库文件但未找到。
解决方案
1. 修复CMake配置中的转义引号问题
你的CMakeLists.txt中使用了HTML转义的",这会导致编译时插入多余的引号和空格,破坏库的查找路径。将所有"替换为正常的双引号,同时移除不必要的空设置:
修改后的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0 FATAL_ERROR) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) project(App) set(programName App) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeFiles/") set(CMAKE_C_COMPILER "clang") set(CMAKE_CXX_COMPILER "clang++") file(GLOB SRC "src/*/*.c" "src/*/*.h" "src/*.c") add_executable(App ${SRC})
2. 验证源文件正确性
确保src目录下的C文件是标准的Hello World代码,例如src/main.c:
#include <stdio.h> int main() { printf("Hello World!\n"); return 0; }
3. 清理旧构建文件并重新编译
# 清理旧构建目录 rm -rf build/ # 创建新构建目录并编译 mkdir build && cd build cmake .. make # 运行程序 ./App
4. 关于libSystem.B.dylib的说明
在M1 MacOS中,libSystem.B.dylib并不是直接存在于/usr/lib下的文件,实际系统的libSystem是一个符号链接:
ls -l /usr/lib/libSystem.dylib # 输出:/usr/lib/libSystem.dylib -> /System/Library/Frameworks/System.framework/System
错误中出现的异常路径是转义引号导致的,修复CMake配置后即可正常链接系统库。
内容的提问来源于stack exchange,提问作者kon coder
相关产品推荐
相关产品推荐

