寫做是一種習慣,稍微鬆懈,也許失去的就不少。過了一個年,竟然不少天都沒有更新,幸福的代價吧:)程序員
標題的問題其實之前碰到過,不過當時在iOS,因此隨手處理了沒有重視。
而此次是在macOS,所使用的庫,自己已經用brew安裝過,因此本機調試沒有發現這個問題。
等到拷貝到用戶的機器上,忽然發現程序沒法啓動,查看log才發現庫沒有找到。而實際上當時,我已經很確認的將dylib庫文件打包到了app中。bash
隨後發現macOS的dylib採起了比較特殊的機制,每一個文件都內置有完整的路徑名,若是不把dylib文件放置到這個路徑上去,應用調用dylib的時候就會報錯找不到庫文件。
官方推薦的解決的方法是將庫文件及頭文件打包編譯爲Frameworks,隨後引入到項目中。不過對於不少gnu的跨平臺程序員,確定不但願單獨爲macOS來寫一個Xcode工程。
因此我建議仍是使用內置的工具來修改這個執行路徑,步驟以下:app
otool -L libabc.0.dylib
命令來查看這個庫內置的路徑名,沒有意外的話,應當是/usr/local/lib/libabc.0.dylib
。install_name_tool -id @executable_path/../Frameworks/libabc.0.dylib libabc.0.dylib
注意修改以後的路徑@executable_path/../Frameworks/libabc.0.dylib
,這個是app中的Frameworks目錄,許多引用的框架和sdk內置的dylib文件,編譯時候會放置到這裏。框架
libabc.0.dylib
,這是保證app編譯連接的時候可以正常經過。我記得Xcode7仍是什麼版本中,在這裏銀如意了庫文件,庫文件就會被自動的加入到Frameworks目錄,但也許是否是sdk內置的庫文件,只在這裏引用解決了連接問題,但並不能自動把dylib庫文件打包到app中。作完了以上這些,編譯出來的app應用就能正確的調用本身包中的庫文件了。工具