将dylib插入现有的bundle / executable中

时间:2014-01-15 07:56:07

标签: objective-c macos

我有一个现有的bundle / executable,我需要在其中添加一个新的dylib。

方法我已经尝试过:

  • 将dylib复制到bundle&在info.plist中设置dyld_insert_libraries以加载库。这适用于我无法控制应用程序/包(或库,如果外部包)的位置的一个问题,并且相对路径(例如@executable_path)不能在info.plist中使用。

  • 使用install_name_tool(-add_rpath,-id等)为库添加新路径。除非在那里改变路径,否则这似乎不起作用。 (库的名称/安装位置是正确的,并且已经多次检查过。)

对于这个问题是否有任何进一步的解决方案,甚至是我已经尝试过的解决方案(上图)的修改?

2 个答案:

答案 0 :(得分:0)

您还可以设置环境变量DYLD_INSERT_LIBRARIES以在执行二进制文件时指向要注入的库。有关详细信息,请参阅https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man1/dyld.1.html

答案 1 :(得分:0)

我已经制作了一个名为insert_dylib的工具:https://github.com/Tyilo/insert_dylib

以下是使用信息:

Usage: insert_dylib [--inplace] [--weak] dylib_path binary_path [new_path]

以及如何使用它:

 $ insert_dylib /usr/lib/libfoo.dylib test
 The provided dylib path doesn't exist. Continue anyway? [y/n] y
 Added LC_LOAD_DYLIB command to test_patched
 $ diff -u <(otool -hl test) <(otool -hl test_patched)
 ...