2013-06-25 25 views
1

因此,我们有一个供应商的共享库,它不会在Linux或Android上(但在其他平台上)以静态存档格式以.a格式提供库,因为它们不便于他们更改他们的构建过程。问题是需要包装线程创建,malloc和其他许多apis来解决平台非标准libc中的错误。我们用LD使用“ - wrap”命令将函数重定向到我们的包装。不幸的是,编译.so,我们不能重新链接它。有没有办法将.so转换为静态存档并重新链接它,甚至是重写链接表以将这些调用重定向到我们的包装?重写elf中的链接表

除了拆卸,更改库和重新组装之外,我想不出任何方法可以轻松完成此操作。

+0

'LD_PRELOAD'技巧有帮助吗? – 2013-06-25 18:20:42

+0

,因为在android上,你的启动过程是Zygote进程的分叉,所以你不能使用LD_PRELOAD。您可以在子进程上使用LD_PRELOAD,但不能在主进程中执行。我希望我能。 –

回答

1

反正是有旋转。所以为静态档案

LD_PRELOAD似乎达到你想要什么,最简单的方法。

因为在android上,你是启动过程中的Zygote进程的fork,所以你不能使用LD_PRELOAD。您可以在子进程上使用LD_PRELOAD,但不能在主进程中执行。

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