问题描述:macOS app应用包含二进制程序,在10.14.6以下直接运行二进制程序报错。
解决步骤:
1.查看工程引用的libswiftCore 库的路径设置的是否正确,一般动态库会设置@rpath,方便调用的程序引用,调用的程序需要在Build Settings -> Runpath search Path 设置加载路径
截屏2022-07-28 18.01.49.png
关于@rpath(变量,然后基于变量得到相对路径,谁链接它谁来提供)、@ executable_path(表示可执行程序所在的目录,解析为可执行文件的绝对路径)、 @loader_path(二进制程序加载时的路径)可自行搜索。
其实路径设置的没有问题,继续查。
2.看看当前二进制程序所加载的动态库
终端,命令:otool -L 程序名
可以发现报错的@rpath/libswiftCore.dylib
为什么程序调用的时候没有找到?
这时候我们可以看下我们程序给@rpath设置的值,就是项目工程里设置的Runpath search Path
命令:otool -l 程序名
可以看到 LC_RPATH ,这个值就是我们工程设置的路径
3.为啥@rpath都设置了还是找不到动态库?目前想到的解决方式就是 将程序内 Frameworks路径加到@rpath下,可在工程配置添加一条路径。如下:
image.png
重新打包安装,问题即可解决!
如要验证第三步,可直接用命令添加@rpath
终端,命令:
cd /Applications/AiSDP.app/Contents/MacOS
ls
install_name_tool -add_rpath /Applications/AiSDP.app/Contents/Frameworks UTun
运行 ./UTun 查看结果
网友评论