【问题标题】:__android_log_print not printing from library__android_log_print 未从库中打印
【发布时间】:2014-11-26 11:46:48
【问题描述】:

我有一个 NDK 应用程序,它由三个部分(共享库)组成:

  • 一个基础库,其中包含一些日志记录功能,这些函数调用 __android_log_print
  • 我的游戏引擎库,它从基础库调用日志记录函数
  • 主模块,它从基础库调用日志函数,以及从游戏引擎生成日志输出的函数

一切都编译并成功运行,但即使我知道正在调用 __android_log_print ,我也看不到任何日志输出(我在行上放置了一个断言以使其中止以确保)。

如果我直接从主模块调用 __android_log_print,它可以工作。如果我从 Java shim 活动调用日志记录语句,它也可以工作,但通过我的库调用不会打印任何内容。

这是什么原因造成的? Android 中是否存在阻止从库代码进行日志记录的功能?

编辑:看起来 __android_log_print 以某种方式被重定向到 stdout/stderr - 我不知道这怎么可能?如果相关,我正在使用 SDL2

【问题讨论】:

  • 你确定没有在游戏引擎库中重新定义__android_log_print吗?使用arm-eabi-nm -D 验证它在库.so 中是否显示为未解析的符号。
  • 实际上,基础库中可能有一些额外的逻辑可以重新定义日志记录操作的行为。例如,我的库读取配置文件来决定是使用 logcat 还是使用日志文件,并且还选择了调试级别。你有这个库的源代码,还是只有编译好的形式?

标签: android c++ logging android-ndk


【解决方案1】:

哈!所以事实证明,由于涉及符号链接、旧头文件和偶然崩溃的一系列重大错误,我轻率地认为这是我的断言,我什至没有调用 __android_log_print!

我的游戏引擎正在拾取一个旧的头文件,其中是日志代码的内联实现(此后已移至源文件中)。然后将其编译到游戏引擎库中,因此忽略了基础库中的正确实现。

如果我没有开始在游戏引擎库中寻找未解析的符号,我永远不会想到这一点,所以感谢你的流行! :)

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 2018-06-05
    • 2011-09-12
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    相关资源
    最近更新 更多