Xcode集成iOS版LSL库时无法找到已存在的.dylib别名怎么办
问题根因
你遇到的报错核心原因是Xcode在嵌入动态库时不会保留软链接:你添加到项目中的liblsl.2.dylib是指向liblsl.1.15.2.dylib的软链接,打包时Xcode只会将实际的二进制文件liblsl.1.15.2.dylib复制到App包的Frameworks目录下,并不会生成对应的liblsl.2.dylib软链接,所以运行时dyld按照LC_ID_DYLIB中指定的@rpath/liblsl.2.dylib路径搜索时找不到对应文件。
解决方案
按照以下步骤操作即可修复:
- 优先处理动态库本身的标识,不需要依赖软链接。执行命令修改实际二进制文件的LC_ID_DYLIB:
把命令中的路径替换为你桌面上存放dylib的文件夹的实际路径。install_name_tool -id @rpath/liblsl.2.dylib 你的桌面文件夹路径/liblsl.1.15.2.dylib - 删除Xcode项目中之前添加的所有LSL相关dylib引用,重新只添加修改后的
liblsl.1.15.2.dylib到「Frameworks, Libraries, and Embedded Content」,保持「嵌入并签名」的选项不变。 - 可选优化:如果你希望Frameworks目录下的文件名和搜索路径一致,可以直接将
liblsl.1.15.2.dylib重命名为liblsl.2.dylib,再执行上面的install_name_tool命令修改标识,之后直接添加重命名后的文件到Xcode即可。
验证操作
修改完成后执行以下命令确认标识配置正确:otool -l 你的dylib文件路径 | fgrep -A2 LC_ID_DYLIB
输出的LC_ID_DYLIB名称需要和你设置的@rpath路径完全一致。
编译运行前可以清理一次Xcode缓存(Command+Shift+K),避免旧的缓存文件影响打包结果。
内容的提问来源于stack exchange,提问作者user17201978
相关产品推荐
相关产品推荐

