5

我正在尝试在 android 设备上运行我的 cocos2d-x 游戏,它在 android 5.0(lollipop) 上完美运行,但在较低的 android 版本上崩溃。我收到以下错误:

02-25 10:41:09.787: E/ResourceType(18090): 0x5ad385b8: ResTable::remove() cookie = 0x3 失败,不是最后一个表。mHeaders.size() = 4。垃圾收集器运行时自发崩溃的警告。02-25 10:41:09.797:E/asset(18090):删除运行时皮肤资源时出错 (cookie 0x3) 02-25 10:41:09.797:I/asset(18090):删除所有运行时皮肤资源时出现问题 02-25 10:41:09.817: D/dalvikvm(18090): 试图加载 lib /data/app-lib/com.example.game-2/libcocos2dcpp.so 0x418c9ce8 02-25 10:41:09.817: E/dalvikvm(18090 ):dlopen(“/data/app-lib/com.example.game-2/libcocos2dcpp.so”)失败:dlopen失败:找不到“libcocos2dcpp.so”引用的符号“atof”... 02-25 10:41:09.817: W/dalvikvm(18090): 异常 Ljava/lang/UnsatisfiedLinkError; 初始化 Lcom/example/game/game 时抛出;02-25 10:41:09.817: W/dalvikvm(18090): 类初始化在 newInstance 调用中失败 (Lcom/example/game/game;) 02-25 10:41:09.817: D/AndroidRuntime(18090): 关闭VM 02-25 10:41:09.817: W/dalvikvm(18090): threadid=1: 线程以未捕获的异常退出 (group=0x415af8b0) 02-25 10:41:09.827: E/AndroidRuntime(18090): 致命异常:主要 02-25 10:41:09.827: E/AndroidRuntime(18090): java.lang.UnsatisfiedLinkError: dlopen 失败: 无法找到“libcocos2dcpp.so”引用的符号“atof”... 02-25 10:41:09.827 : E/AndroidRuntime(18090): at java.lang.Runtime.loadLibrary(Runtime.java:361)example 02-25 10:41:09.827: E/AndroidRuntime(18090): at java.lang.System.loadLibrary(System .java:

我正在使用cocos2d-x v2.2.6、Eclipse-Luna 和 android NDK r10d。

4

5 回答 5

5

尝试添加

APP_PLATFORM := android-19 

作为 Appication.mk 中的第一行

于 2015-03-11T20:06:26.857 回答
1

(我知道这重复了 m0mus 在建议的解决方案中的早期答案,但我认为更全面的解释会有所帮助。)

Google 已将一些 C 标准库函数(如 atof())从头文件中的内联函数移至普通函数。最新的 NDK 将默认构建一个 .so,它仅与最新的 Android 设备兼容,这些设备在设备的标准 C 库 (libc.so) 中具有 atof() 函数。这意味着,如果您在具有旧版本 C 库的旧设备上运行库,则加载 dll 时会出错,因为预期的 atof() 函数将不存在。

您是否尝试在 Application.mk 中进行设置:

APP_PLATFORM := android-9

这将导致 ndk 编译器构建与旧 Android 版本兼容的代码。

您还可以尝试将您的 NDK 安装降级到版本 10b(此版本早于 atof 从内联移动到 libc 的一部分的更改,因此完全避免了该问题)。

于 2016-07-14T16:26:28.627 回答
1

尝试使用 android NDK r9d。对于 cocos2dx ,Android NDK r9d 很好用。

于 2015-10-15T05:06:14.257 回答
0

我做对了,我当前的环境是 cocos2d-x 3.3、NDKr10d、ADT 包(update24)

 log("This is A TEst for ATOF ,%f ", std::atof("1.0"));

尝试在符号中包含 _GXX_EXPERIMENTAL_CXX0X_,将值留空

于 2015-02-25T06:52:13.713 回答
0

在 Android Studio 中,您必须手动设置 NDK。转到项目的 local.properties 文件并将 ndk.dir 值设置到 ndk 目录。

于 2015-09-29T15:12:07.117 回答