0

我最近一直在尝试在 中制作一些非常简单的应用程序Qt,昨天它曾经在桌面和 Android 上都能正常工作 (使用 android ndk,我知道用 c++ 制作 android 应用程序不好,但我只是想尝试) .

今天,不知从何而来,应用程序的输出是这样的:错误图像

我发现的唯一一件事是清理应用程序的缓存和数据,重新启动手机,重建,这些都没有奏效

4

1 回答 1

1

Qt 应用程序在资源的某处有一组使用过的 .so 库名称。在启动时,它会加载所有这些 .so 库(通过loadLibrary())。加载库的顺序很重要:函数不能引用在尚未加载的库中定义的函数。所以实现循环依赖是很棘手的。

从日志中我看到某些函数libszachy_android_1.so(它是正确的名称吗?有点奇怪)调用尚未加载的srand() ;也许,稍后在加载列表中会提到,但 loadLibrary() 不知道计划的未来。因此,你得到了这个。

如果您的代码昨天有效,那么您可能已经进行了一些更改。如果您使用版本控制,您可能可以比较今天和昨天的版本并查看差异。也许,您已经插入了一个前向引用(在加载列表的意义上)。OTOH,有时 Eclipse 和 make 都无法检测到源代码已更改并进行了不正确的构建(我确实观察到了这一点,但无法重现)。您是否尝试从手机中卸载该应用程序?您是否尝试删除构建目录 ( rm *.so) 中的所有现有 .so 文件?

也许,您的 .so 模块之一已损坏:有时尽管有错误仍会生成一个对象,并且它可能会在后续构建中使用(至少这是我可以解释构建故障的方式)。

也许,您的设备上没有剩余内存,并且 .so 无法正确解包。

我建议adb shell在有根设备上检查应用程序目录。

PS您发布了一个几乎无法阅读的屏幕截图。请将其替换为adb logcat输出的相关部分(希望您知道如何使用它;如果没有,首先要做的就是学习adb logcatadb shell)。

于 2014-11-28T12:42:30.313 回答