1

因此,我们从一家供应商那里共享库,该供应商不会在 Linux 或 Android 上以静态存档 .a 格式提供他们的库(但在其他平台上提供),因为他们更改构建过程会很不方便。问题是需要包装线程创建、malloc 和大量其他 api 来解决平台非标准 libc 中的错误。我们使用 LD 执行此操作,使用“--wrap”命令将函数重定向到我们的包装。不幸的是,对于已编译的 .so,我们无法重新链接它。无论如何将 .so 转换为静态存档并重新链接它,甚至重写链接表以将这些调用重定向到我们的包装?

除了拆卸、更改库和重新组装之外,我想不出任何方法可以轻松地做到这一点。

4

1 回答 1

1

有没有办法把 .so 变成静态存档

不。

LD_PRELOAD似乎是实现您想要的最简单的方法。

因为在 android 上,你是启动 Zygote 进程的分支,你不能使用 LD_PRELOAD。您可以在子进程上执行 LD_PRELOAD,但不能在主进程上执行此操作。

所以在你的“启动”过程中,修改环境和execve真实程序。问题解决了?

于 2013-06-26T23:58:30.050 回答