我决定将一个使用SDL库并大量使用C ++和STL的游戏移植到Android上。我已经成功地编译了所有必需的库以及游戏的所有源文件。我的问题是,当我调用System.loadLibrary()为游戏加载.so时,应用程序会立即崩溃,因为“进程org.libsdl.app(pid 3569)已经死了。”
以下是我将所有需要的库和游戏作为共享库加载的代码部分。
static {
// Load the required libraries for the game
System.loadLibrary("SDL");
System.loadLibrary("SDL_image");
System.loadLibrary("SDL_mixer");
System.loadLibrary("SDL_net");
// load the game as a shared library
System.loadLibrary("smw_jni"); // << process dies when this is called
}
libswm_jni.so是用Android NDK和我指定的Applicaion.mk文件编译的
APP_STL := gnustl_static
由于它在System.loadLibrary(“smw_jni”)之后立即崩溃且没有有意义的错误消息,因此我不知道如何找到根本原因。
我一直致力于移植另一款只是普通旧C代码的游戏,但是我不确定这个游戏在C ++方面是否很重要。
提前感谢我对此头痛的任何帮助!
-Clark -
答案 0 :(得分:6)
用这个把头发拉出来之后我终于找到了问题所在。事实证明,其中一个类正在对不存在的文件执行某些文件IO。如果其他人遇到加载共享库的问题,我就是这样做的。
我在调用System.loadLibrary()时启用了断点,当执行在此断点处暂停时,我使用了堆栈跟踪来获取一些未在logcat中提供的额外信息。
由于有相当多的信息,我将堆栈跟踪传输到文件,以便我可以分析它。这是我使用的命令
# adb shell strace -p pid > strace.log
我希望这可以帮助任何在屁股问题上遇到类似痛苦的人。
-Clark -
答案 1 :(得分:0)
您只需要在实际公开JNI接口的库上调用loadLibaray()
。他们的系统应该负责加载任何依赖库,所以我认为你不需要加载SDL_ *。 logcat说什么?