您有兩個選擇a)更改庫ID,b)更改最終產品。
ID嵌入在dylib中,它定義了dyld在哪裏查找它。該ID在鏈接時從庫中獲取(當沒有使用其他特殊標誌時)。您可以用otool -L
進行檢查,例如:
gammu:~$ otool -L /usr/lib/libz.dylib
/usr/lib/libz.dylib:
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
第一行是dylib的ID。您可以使用install_name_tool -id <path> <library>
進行更改。你有一個選擇是使用特殊的形式@executable_path/...
它看起來從你的二進制文件的位置(也有其他人)。
第二個選項(實現相同的目的)是將路徑更改爲產品中的庫。你可以檢查它如何鏈接庫具有相同otool -L
命令:
gammu:~$ otool -L /usr/bin/emacs
/usr/bin/emacs:
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
然後,您可以更改庫與install_name_tool -change <old> <new> <target>
,如:
install_name_tool -change ../lib/abc.dynlib @executable_path/../lib/abc.dylib foo
最後,注意Xcode中通常會自動做這一切爲你如果你讓它管理dylib(而不是手動複製)。
我沒有創建dynlib,所以我無法集成到Xcode中。儘管如此,第二個工作。謝謝! – yzucker