DYLD_INSERT_LIBRARIES和iPhone

时间:2011-10-27 01:08:20

标签: iphone ios info.plist

据我所知,Apple不支持在iPhone应用程序中使用动态库。但是我们正在开发一个内部应用程序,我们有一个使用动态库的独特要求。我们的要求是加载动态库作为“iPhone”应用程序启动的一部分。我读到DYLD_INSERT_LIBRARIES就是为了这个目的。所以我编辑了Info.plist并在下面添加了条目。        LSEnvironment                          DYLD_INSERT_LIBRARIES                 @ executable_path / sample.dylib         

但它似乎没有起作用。你能告诉我你的想法吗?真的很感谢你在这方面的帮助。

由于 --Neo

4 个答案:

答案 0 :(得分:4)

我找到了一种使用optool成功将LC_LOAD_DYLIB加载命令添加到MachO二进制文件的方法。

$ optool install -c load -p "@executable_path/<dylib_path>" -t <executable>
$ otool -L <executable>

构建optool时,请确保构建设置OTHER_LDFLAGS包含-ObjC

optool似乎无法为arm64架构成功添加加载命令,因此您可能希望从二进制文件中删除arm64

$ lipo <input_file> -remove arm64 -output <output_file>

修改
有一个开放的pull request支持arm64。

答案 1 :(得分:0)

我也在最近几天处理同样的问题。我也没有像你尝试的那样成功。所以我尝试使用以下链接从其他应用启动我的应用: Dynamic Library injection ,不幸的是Apple Block运行多项任务(甚至在iphone模拟器上),但你可以试试,也许你会有更多的运气。我知道这不是你期望的答案,但也许它会给你一些思考方式。如果您有一些进展,请分享。

答案 2 :(得分:-1)

您“可以”在运行时加载二进制文件,您可以操作xcode设置以使其为iOS编译dylib。看到这个答案:

https://stackoverflow.com/a/10509453/784387

答案 3 :(得分:-2)

很高兴得到纠正,但dylibs不受支持且不起作用。您需要获取库的代码并将它们编译为arm6 / 7体系结构的静态库。然后,您可以轻松地包含这些库。有很多静态库的例子,XCode也提供了构建它们的目标。