MAC引用動態庫時報錯:
查看一個可執行文件或者動態庫引用的第三方庫路徑:otool -L xxx.dylib
- 第一行是動態庫的安裝名稱(INSTALL Name)。當另一個客戶端鏈接到這個 dylib 時,dylib 的安裝 ID 會被復制到客戶端中作為dylib的安裝路徑。
- 后邊的才是這個動態庫引用到的第三方庫。
使用install_name_tool 的id參數來修改這個install name:
sudo install_name_tool -id @executable_path/../xxx.dylib xxx.dylib
將動態鏈接庫添加到.app的搜索路徑中:
install_name_tool -add_rpath /xxx/lib ./NetAnim
@executable_path
:可執行程序所在的目錄
@loader_path
:表示每一個被加載的 binary (包括App, dylib, framework,plugin等) 所在的目錄。
@rpath
是一個類似Shell中的PATH的變量,程序在執行時會從@rpath
指定的路徑中尋找動態鏈接庫文件。
MAC:@rpath的坑
踩坑1:install_name修改失敗
庫文件加載失敗,通過otool -l xxx.dylib
查看報錯中的“command 5”。
- 如果為一個Mac OS X版本構建對象,然后在早期的Mac OS X版本上使用該對象,則可能會發生“未知加載命令”錯誤。
Mac load命令損壞
otool-目標文件顯示工具