問題描述:macOS app應(yīng)用包含二進(jìn)制程序,在10.14.6以下直接運(yùn)行二進(jìn)制程序報(bào)錯(cuò)狱窘。
解決步驟:
1.查看工程引用的libswiftCore 庫的路徑設(shè)置的是否正確,一般動態(tài)庫會設(shè)置@rpath,方便調(diào)用的程序引用,調(diào)用的程序需要在Build Settings -> Runpath search Path 設(shè)置加載路徑
關(guān)于@rpath(變量图云,然后基于變量得到相對路徑,誰鏈接它誰來提供)邻邮、@ executable_path(表示可執(zhí)行程序所在的目錄竣况,解析為可執(zhí)行文件的絕對路徑)、 @loader_path(二進(jìn)制程序加載時(shí)的路徑)可自行搜索筒严。
其實(shí)路徑設(shè)置的沒有問題丹泉,繼續(xù)查。
2.看看當(dāng)前二進(jìn)制程序所加載的動態(tài)庫
終端鸭蛙,命令:otool -L 程序名
可以發(fā)現(xiàn)報(bào)錯(cuò)的@rpath/libswiftCore.dylib
為什么程序調(diào)用的時(shí)候沒有找到摹恨?
這時(shí)候我們可以看下我們程序給@rpath設(shè)置的值,就是項(xiàng)目工程里設(shè)置的Runpath search Path
命令:otool -l 程序名
可以看到 LC_RPATH 娶视,這個(gè)值就是我們工程設(shè)置的路徑
3.為啥@rpath都設(shè)置了還是找不到動態(tài)庫晒哄?目前想到的解決方式就是 將程序內(nèi) Frameworks路徑加到@rpath下,可在工程配置添加一條路徑肪获。如下:
重新打包安裝寝凌,問題即可解決!
如要驗(yàn)證第三步孝赫,可直接用命令添加@rpath
終端较木,命令:
cd /Applications/AiSDP.app/Contents/MacOS
ls
install_name_tool -add_rpath /Applications/AiSDP.app/Contents/Frameworks UTun
運(yùn)行 ./UTun 查看結(jié)果