macOS下QT動(dòng)態(tài)庫(kù)打包嵌入問(wèn)題處理

Crash信息

Termination Reason: Namespace DYLD, Code 1 Library missing
Library not loaded: @rpath/QtCore.framework/Versions/5/QtCore
Referenced from: /Applications/AppName.app/Contents/MacOS/AppName
Reason: tried: '/Applications/AppName.app/Contents/MacOS/../Frameworks/QtCore.framework/Versions/5/QtCore' (no such file), '/Applications/AppName.app/Contents/MacOS/../Frameworks/QtCore.framework/Versions/5/QtCore' (no such file), '/Applications/5.12.12/5.12.12/clang_64/lib/QtCore.framework/Versions/5/QtCore' (no such file), '/Applications/AppName.app/Contents/MacOS/../Frameworks/QtCore.framework/Versions/5/QtCore' (no such file), '/Applications/AppName.app/Contents/MacOS/../Frameworks/QtCore.framework/Versions/5/QtCore' (no such file), '/Applications/5.12.12/5.12.12/clang_64/lib/QtCore.framework/Versions/5/QtCore' (no such file), '/Library/Frameworks/QtCore.framework/Versions/5/QtCore' (no such file), '/System/Library/Frameworks/QtCore.framework/Versions/5/QtCore' (no such file)
(terminated at launch; ignore backtrace)

打包后在其它電腦安裝后出現(xiàn)了上述問(wèn)題,找不到QtCore.framework,之前開發(fā)一直在自己的開發(fā)電腦,該機(jī)器是安裝了QT環(huán)境的,調(diào)試跑起來(lái)也沒注意到這個(gè)問(wèn)題

解決問(wèn)題

查看工程引入的QT庫(kù),原來(lái)使用的是靜態(tài)庫(kù),這個(gè)版本升級(jí)了QT使用的是動(dòng)態(tài)庫(kù)了,發(fā)現(xiàn)沒有嵌入,于是果斷修改庫(kù)嵌入方式為Embed & Sign,再次編譯

/Users/用戶名/Documents/Terminal/trunk/項(xiàng)目名稱/ReleaseLib_MAC/AppName.app: unsealed contents present in the root directory of an embedded framework
In subcomponent: /Users/用戶名/Documents/Terminal/trunk/項(xiàng)目名稱/ReleaseLib_MAC/AppName.app/Contents/Frameworks/QtCore.framework

結(jié)果并不是預(yù)期的,在Debug環(huán)境下始終無(wú)法編譯,甚至換成Embed Without Signing 也是不行

通常我們的動(dòng)態(tài)庫(kù)是選擇Embed嵌入打包進(jìn)app的,這個(gè)QT庫(kù)卻有點(diǎn)不一樣。沒辦法,于是上網(wǎng)查找了,所幸找到了,解決辦法是Xcode工程不嵌入動(dòng)態(tài)庫(kù),也就是對(duì)QT動(dòng)態(tài)庫(kù)保持Do Not Embed配置。

其次,在Build Phases中添加一個(gè)編譯腳本

/Users/用戶名/QT/5.12.12/clang_64/bin/macdeployqt ${CODESIGNING_FOLDER_PATH}

同時(shí),在Xcode的主target build settingOther Code Signing Flags 添加一個(gè)簽名標(biāo)志位 --deep

這里需要使用QT提供的工具處理這幾個(gè)動(dòng)態(tài)庫(kù),在編譯打包的時(shí)候會(huì)把動(dòng)態(tài)庫(kù)拷貝到app包內(nèi)的Frameworks文件夾下,這樣打包發(fā)布就可以正常找到動(dòng)態(tài)庫(kù)了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容