【发布时间】:2013-01-03 18:33:02
【问题描述】:
我想知道较新的 Android 版本现在是否支持 LD_PRELOAD?
在 4.0 ICS 时不是这样,并且在文档 (NDK docs/SYSTEM-ISSUES.html) 中仍然有:
No support for LD_LIBRARY_PATH, LD_PRELOAD, RTLD_LOCAL and many other options.
但几天前,我在我的 Android 4.2 Galaxy Nexus 上使用了 LD_LIBRARY_PATH,它工作了(!)。
提前致谢!
【问题讨论】:
-
我记得让其中一个工作,但有人想知道你打算用它做什么 - 在正常的 Android 操作期间,exec() 并没有真正使用,所以没有太多机会这样的设置才有效果。如果您想确切了解,请检查源代码,在链接器二进制文件上运行字符串,或对其进行测试。
-
我以前从未使用过 LD_PRELOAD,但不知道我是否可以在 android 中做这样的事情:linuxjournal.com/article/7795
-
但是用它做什么呢?如果您正在处理正确的 Android 代码,您会将 jni 库加载到现有进程中,在这种情况下,您可以简单地先加载带有替换函数的库 - 尽管要注意大多数系统库都预先加载了很长时间在您编写的第一行代码运行之前。链接器预加载变量实际适用的情况是,如果您实际上正在执行二进制文件 - 在 unix 传统中比在 android 中操作更多。
标签: android android-ndk android-4.2-jelly-bean ld-preload