【问题标题】:Exception updating game to cocos2d-x v2.0异常更新游戏到 cocos2d-x v2.0
【发布时间】:2012-06-12 00:01:15
【问题描述】:

我正在开发 linux + eclipse。

我已按照 wiki 提供的步骤更新了我的代码。

1º 我创建了一个新的 Eclipse 项目。 2º 我运行 hello world 并且它有效。 3º 我将旧代码放在类和资源上。 4º 我用新文件更新了 appdelegate.cpp .h 和 jni/Android.mk。 5º 编译正确。

6º 从 eclipse 启动我得到以下异常:

试图加载 lib /data/data/org.piero.game/lib/libgame.so 致命信号 11.

出了点问题,但我不知道发生了什么。

相同的代码适用于 xcode 项目。
我没有得到 CCLOG 消息 con Appdelegate 构造函数,也没有在 main.cpp 上的 Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit 上。

LOGCAT:

---- 日志测试运行 HELLO WORLD ------ 06-13 18:29:07.189: D/dalvikvm(11613): 试图加载 lib /data/data/piero.corporation.nyan/lib/libgame.so 0x40f87190 06-13 18:29:07.199: D/dalvikvm(11613): 添加共享库 /data/data/piero.corporation.nyan/lib/libgame.so 0x40f87190 06-13 18:29:07.269:W/apk 路径(11613):/data/app/piero.corporation.nyan-2.apk 06-13 18:29:07.409:D/SurfaceView(11613):pckname = pipero.corporation.nyan 06-13 18:29:07.809: D/libEGL(11613): 加载 /system/lib/egl/libGLES_android.so 06-13 18:29:07.859: D/libEGL(11613): 加载 /system/lib/egl/libEGL_mali.so 06-13 18:29:07.919: D/libEGL(11613): 加载 /system/lib/egl/libGLESv1_CM_mali.so 06-13 18:29:07.929: D/libEGL(11613): 加载 /system/lib/egl/libGLESv2_mali.so - - - - - - - - - - - - - - - - - - - 好的 - - - - - - ------------------ ---- LOG TEST RUNNING TEST 将 android 文件更改为我的 ------ 06-13 18:36:31.789: D/dalvikvm(12046): 试图加载 lib /data/data/piero.corporation.nyan/lib/libgame.so 0x40f8de18 06-13 18:36:31.799: A/libc(12046): 致命信号 11 (SIGSEGV) 在 0x00000030 (code=1) - - - - - - - - - - - - - - - - - - - - 失败 - - - - - ----------------

我尝试在另一台平板电脑(Android 3.2)中编译,我遇到了同样的问题。这次的日志是:

06-12 15:16:16.610:我/调试:* * 06-12 15:16:16.610:I/DEBUG:构建指纹:'asus/WW_epad/TF101:3.2.1/HTK75/WW_epad-8.6.5.13-20110925:user/release-keys' 06-12 15:16:16.610: I/DEBUG: pid: 1183, tid: 1183 >>> pipero.corp.test

所以,信号 11 SEGV_MAPERR,我认为这是编译的问题,找到了库,但程序无法正确加载它。 JNI 不执行 jni_Onload。

一些想法???

提前致谢。

【问题讨论】:

  • 我想你可能会发现一个 cocos2d-x 错误。通常,当您的代码可以在 xcode 和 ndk 上编译,并且仅在一个平台上收到致命信号时,这意味着框架有问题。您确实在新项目文件夹中使用 ./build_native.sh 重新构建了源代码,对吗?我没有将我的代码合并到 2.0,因为它不够稳定,并且对许多代码更改(例如 CCTouchDispatcher 被移到 CCDirector 等)没有太大帮助。
  • 是的,我尝试重建 3 次。并创建一个新项目 3 次。我第一次在 XCode 项目上遇到这种情况,但第二次效果很好。我不知道有什么不同

标签: android java-native-interface shared-libraries cocos2d-x


【解决方案1】:

当您收到致命信号 11 时,也许您想看看 this。这是一个分段错误,访问未分配的内存位置,通常是由于编程错误。

祝你好运,但由于有些人对新版本没有问题,最有可能的情况是你有一个旧版本没有问题的编程错误。

【讨论】:

  • 问题是,库没有加载,1情况下,log cat say: 06-13 18:29:07.199: D/dalvikvm(11613): added shared lib /data/data/ pipero.corporation.nyan/lib/libgame.so 0x40f87190;但是当我使用我的代码时,没有出现那行,所以,lib 没有加载,所以,分段 11,因为找不到函数。
  • 看看你有没有这些库,如果有的话,试着把路径改成更简单的,以防万一。我不喜欢认为是 cocos-2d 的 bug,总觉得是我的错,但谁知道呢……
【解决方案2】:

在您的项目文件夹中,仔细检查 lib 文件是否确实在您的 android libs 文件夹中。

[cocos2d-x root]/[game_name]/android/libs

里面应该有一个名为 libgame.so 的文件。

如果编译成功,应该会生成 .so 文件。编译时,我发现在 Eclipse 中“刷新”项目很有帮助,以便 Eclipse 重新扫描目录以查找任何新文件/修改以打包到 APK 文件中进行部署。

我相信你可以在 eclipse 中启用一个选项来自动检测文件系统更改,但我不确定该选项在哪里。

【讨论】:

  • 感谢您的回答。 libgame.so 存在于 libs/armeabi 文件夹中,我尝试刷新,但它发生了同样的事情。
  • 在 Java 领域的启动活动(扩展 Cocos2dxActivity)中怎么样?你有一个静态的 { System.loadLibrary("game"); } 那里的某个地方?这是我唯一能想到的..
  • 静态 { System.loadLibrary("game"); } 用在一般的java上,在onCreate里面。自动生成的项目可以工作(也使用 libgame.so),但是更改我的代码,不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
相关资源
最近更新 更多