据我所知,Apple不支持在iPhone应用程序中使用动态库。但是我们正在开发一个内部应用程序,我们有一个使用动态库的独特要求。我们的要求是加载动态库作为“iPhone”应用程序启动的一部分。我读到DYLD_INSERT_LIBRARIES就是为了这个目的。所以我编辑了Info.plist并在下面添加了条目。 LSEnvironment DYLD_INSERT_LIBRARIES @ executable_path / sample.dylib
但它似乎没有起作用。你能告诉我你的想法吗?真的很感谢你在这方面的帮助。
由于 --Neo
答案 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。看到这个答案:
答案 3 :(得分:-2)
很高兴得到纠正,但dylibs不受支持且不起作用。您需要获取库的代码并将它们编译为arm6 / 7体系结构的静态库。然后,您可以轻松地包含这些库。有很多静态库的例子,XCode也提供了构建它们的目标。