【发布时间】: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