1. 程式人生 > >將dylib庫嵌入macOS應用後執行出現dyld: can't resolve symbol _xxx的解決方法

將dylib庫嵌入macOS應用後執行出現dyld: can't resolve symbol _xxx的解決方法

在製作macOS應用程式時,將庫放入xcode工程後連線成功但是執行會報dyld: can't resolve symbol _xxx in /xxx/xxx/... because dependent dylib #N could not be leaded的原因有兩個:

1:必須將庫新增到TARGET->General->Embedded Binaries下:

因為如果不將動態庫新增到Embedded Binaries下當程式Build後動態庫是不會被放入打包的應用程式裡的。
如果添加了則會在應用程式的Contents/Frameworks路徑下看到你的動態庫。

2.需要檢查更改動態庫內部的安裝路徑,安裝路徑必須是@executable_path/../Frameworks/xxx.dylib檢視安裝路徑的命令:otool -L xxx.dylib如下

然後需要更改內部安裝路徑命令:install_name_tool -id @executable_path/../Frameworks/xxx.dylib xxx.dylib,之後繼續使用otool -L xxx.dylib命令檢視安裝路徑是否變成@executable_path/../Frameworks/xxx.dylib。

如果動態庫是你自己做的那麼可以在生成動態庫的xcode工程中設定動態庫安裝路徑:在TARGET->Build Settings中搜索library Install將Dynamic Library Install Base更改為@executable_path/../Frameworks:

完成。