Android app logcat错误我无法弄清楚这意味着什么

时间:2014-07-10 04:57:29

标签: android kivy

我用kivy构建了android的app,并使用buildozer来创建apk文件。当我在移动设备上运行应用程序时,我会弹出“不幸的是appname已停止”。

这是logcat错误,有什么建议吗?

E/AndroidRuntime( 5738): java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_relocate(linker.cpp:987): cannot locate symbol "wait4" referenced by "libpython2.7.so"...

E/AndroidRuntime( 5738):        at java.lang.Runtime.loadLibrary(Runtime.java:372)

E/AndroidRuntime( 5738):        at java.lang.System.loadLibrary(System.java:514)

E/AndroidRuntime( 5738):        at org.renpy.android.PythonActivity.run(PythonActivity.java:254)

E/AndroidRuntime( 5738):        at java.lang.Thread.run(Thread.java:838)

1 个答案:

答案 0 :(得分:1)

以防万一有人偶然发现这一点。我遇到了同样的问题,但是使用平台工具和NDK r10和r10b从头开始构建python。

这是因为谷歌删除了NDK平台android-19中的内联wait4()声明。最初的问题是wait4()在标题中公开但没有在任何地方声明,所以如果你试图在较旧的NDK上使用wait4,你可能会崩溃(就像你现在一样)。

所以他们进入并将其添加到API 18中的libc.so我相信,但是libc.so随O / S一起提供,因此O / S大于18的设备不会有wait4,所以他们修补了它通过android-18在NDK平台上添加一个内联的wait4()方法,然后在android-19中将它取出来我还不完全确定为什么呢,似乎在这一点上不管它是否更合理,特别是因为它被认为是一个过时的功能。我被告知如果我希望应用程序在早于API 18的设备上运行,我不应该针对android-19进行构建,但是其他人说要始终使用最新的NDK来匹配您的构建目标。这是问题的链接。

https://code.google.com/p/android/issues/detail?id=19854

就我而言,我进入了cpython Modules / posixmodule.c文件,并添加了:

#if defined(__ANDROID__)
#undef HAVE_WAIT4
#endif

在我的情况下,没关系,因为我的python模块都没有使用wait4。实际上,Linux认为wait4命令已经过时(http://linux.die.net/man/2/wait4)。您应该使用waitpid。

所以,即使你下载了一些使用wait4的第三方python模块,你也有2个选择。 1)将该模块更改为使用waitpid,或者2)更新“ifdef HAVE_WAIT4”部分中的Modules / posixmodule.c文件,并用waitpid替换wait4调用。缺点是你丢失了返回的资源使用信息,waitpid没有提供,所以如果你的模块需要,你必须添加一些内容来分别检索该pid的资源使用情况。

或者,如果您从未计划使用它,可以从配置脚本中删除“wait4”,并且您添加的任何需要它的模块都会中断,此时处理该问题的新工程师必须重新发现所有这一次又一次。