Xcode中SFML项目编译成功但运行报错dyld: Library not loaded
解决Xcode中SFML动态库加载失败(dyld: Library not loaded)的问题
我之前在Xcode 9.x + High Sierra环境下折腾SFML时,也碰到过和你完全一样的运行时库找不到的问题——编译顺利通过,但一运行就弹出dyld: Library not loaded: @rpath/libsfml-system.2.5.dylib的报错,给你几个亲测有效的解决步骤:
1. 配置Runpath Search Paths
打开你的Xcode项目,进入Target的Build Settings,搜索Runpath Search Paths:
- 添加SFML库所在的lib目录绝对路径,比如你这里的
/Users/mulperi/cpplib/sfml/lib - 也可以用相对路径(如果项目和SFML目录位置固定的话),比如
$(PROJECT_DIR)/../cpplib/sfml/lib(假设项目文件夹和cpplib在同一层级) - 确保路径前面的复选框是勾选状态,这样Xcode运行时会去这个路径查找@rpath对应的库
2. 检查并修正动态库的Install Name
有时候SFML默认的库路径设置可能和你的环境不匹配,用终端命令查看库的安装名称:
otool -L /Users/mulperi/cpplib/sfml/lib/libsfml-system.2.5.dylib
如果输出里的libsfml-system.2.5.dylib路径不是@rpath/...,可以用install_name_tool修改它:
install_name_tool -id "@rpath/libsfml-system.2.5.dylib" /Users/mulperi/cpplib/sfml/lib/libsfml-system.2.5.dylib
注意:你用到的每个SFML库(比如window、graphics、audio等)都需要做同样的操作。
3. 添加Copy Files Build Phase(最稳妥的方法)
这个方法能确保运行时APP包内自带所需的SFML库,不会受外部路径影响:
- 进入Target的Build Phases,点击右上角的
+号,选择New Copy Files Phase - 在新的Copy Files阶段里,把Destination设置为
Frameworks - 点击
+号,导航到/Users/mulperi/cpplib/sfml/lib,选择你代码中用到的所有SFML动态库(比如libsfml-system.2.5.dylib、libsfml-window.2.5.dylib等)添加进去 - 编译运行,此时Xcode会把这些库复制到APP包的Frameworks目录下,运行时dyld就能找到它们了
4. 确认版本兼容性和库的正确性
- 确保你下载的是macOS版本的SFML 2.5,不要错下成Linux或Windows版本
- Xcode 9.3.1默认编译64位程序,所以要下载64位的SFML库(SFML 2.5 for macOS默认就是64位的)
- 检查Link Binary With Libraries里是否正确添加了所需的SFML库,而不是只设置了搜索路径
额外小提示
如果之前移动过SFML的位置,一定要同步更新Include Search Path、Library Search Path以及上面提到的所有路径设置,避免路径失效。
内容的提问来源于stack exchange,提问作者Mulperi
相关产品推荐
相关产品推荐

