如何在Android上的动态链接器中启用调试输出?

时间:2011-08-24 15:08:42

标签: android debugging linker

Backgroud:

我的应用程序无法在链接阶段运行并获得以下消息:

link_image [1995] ... lib1.so
无法链接可执行文件

应用程序依赖于以下几个动态库:

app需要lib1,lib1 dlopen lib2,而在lib1中有一个由app导出的符号(全局变量)。

我用一个简单的程序测试了lib2,没问题。所以我认为失败是由于链接阶段的lib1 。(我可以保证应用程序所需的所有其他库都在当前目录中,并且“./”已添加到LD_LIBRARY_PATH。我还试图把所有的lib放到/ system / lib)

问题:

  1. 如何启用链接器的调试输出以获取详细的错误消息?
  2. 还有其他建议吗?
  3. EDIT1: 经过一些更多的测试后,看起来链接错误是由lib1引用的全局符号引起的,它是在main.c中定义的。

    Android是否需要额外的构建标志才能在main中启用引用全局变量?

2 个答案:

答案 0 :(得分:1)

你必须重新编译。在这里抓取适当的(分支,标签)来源:

https://github.com/android/platform_bionic/tree/master/linker

在Android.mk中,您要将其设置为1:

# Set LINKER_DEBUG to either 1 or 0
#
LOCAL_CFLAGS += -DLINKER_DEBUG=0

如果你想降低,请查看TRACE()和DL_ERR()。正如您将看到的,TRACE()是预处理器定义的,因此被编译出来。否则,您可以使用自己的值快速修补debug_verbosity或其检查。

答案 1 :(得分:0)

从源代码构建(AOSP 9.0)时,可以通过设置LD_DEBUG标志在目标上动态完成

export LD_DEBUG=3
  • 3:调试-> logcat调试(可能会记录很多日志)
  • 2:跟踪-> logcat信息
  • 1:信息-> logcat警告
  • 0:默认-> logcat致命

在目标上,您可以使用以下命令显示链接器消息:

logcat -s linker
相关问题