【问题标题】:Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 655 (Thread-77)致命信号 11 (SIGSEGV) 位于 0x00000000 (code=1),线程 655 (Thread-77)
【发布时间】:2013-09-19 07:45:01
【问题描述】:

我正在使用 cocos2d-x 为 Android 开发一个应用程序。我是 cocos2d-x 和 C++ 的新手,而且我在 Windows 上,我遵循了从为 Eclipse 创建 Cocos2d-x 项目模板到将项目导入 Eclipse 并向其添加 c++ 功能等的正当程序......我成功了让我的应用程序在模拟器中运行(目标 API 4.1),它给了我预期的 cocos2d“HelloWorld Splash”。问题是,现在我正在尝试更改我的应用程序背景图像。我在资产目录中添加了一个图像,并更改了“HelloWorldScene.cpp”中创建默认 HelloWorld Sprite 的代码

来自:

CCSprite* pSprite = CCSprite::create("HelloWorld.png");

到:

CCSprite* pSprite = CCSprite::create("background.jpg");

一旦我执行后者,我的模拟器在尝试运行应用程序后崩溃,并且在 logcat 中我收到错误“致命信号 11 (SIGSEGV) at 0x00000000 (code=1)”,但如果我放回默认的 HelloWorld。 png 再次在模拟器中顺利运行。

我使用 cocos2d-2.0-rc2-x-2.0.1 和 android-ndk-r8b。此应用程序仅在 4.1 API 设备模拟器上运行,我无法让它在 2.3.3 和 4.3 上运行,因为它在尝试运行时崩溃。拜托,请帮帮我

【问题讨论】:

  • 很明显,您正在尝试从NULL 指针中读取。也许您的 CCSprite::create 无法加载文件并返回 NULL 指针,而您没有正确检查。
  • 但我在 assets 目录中有 background.jpg 文件。为什么它会返回NULL?请问在代码中我还有什么需要做的吗?

标签: android cocos2d-x


【解决方案1】:

我想你可能忘记运行 build_native.sh 脚本来更新 libgame.so

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • @AshwiniAgarwal 我已经根据stackoverflow.com/questions/16157861/… 编辑了我的帖子,但我仍然不同意您的评论。有时向作者提问确实有助于他们思考和修改他们的帖子,并可能帮助他们自己找到答案。我不在乎“答案”是否必须以句号或问号结尾,只要对作者有帮助,我仍然会尝试。
  • @AshwiniAgarwal 证明一个问题可能对作者有帮助 stackoverflow.com/questions/12999771/…stackoverflow 的主要目标是帮助他人,只要它不使用冒犯性语言,而不是像“答案不能是问题”这样的限制因为它没有提供真正的答案”。至少一个问题可以帮助他人思考。
  • @m.ding 你的意思是“运行 build_native.sh 脚本来更新 libgame.so”,请问我该怎么做?
  • @degee cocos2d-x 所做的是,它首先将你的 c++ 代码编译成一个 java 库,并把它放到 libs/arm-v7s 文件夹中,然后它使用 eclipse build 来构建这个库与资产一起到 apk 文件。一旦你编辑了 c++ 文件,你必须重建 libgame.so。 android 项目文件夹中应该有一个名为 build_native.sh 的脚本,您可以使用 cygwin(windows) 运行它,也可以在 Mac 下运行它。此脚本将根据您在 Resources 文件夹中放置的任何内容将源代码重建到库并更新 assets 文件夹。
【解决方案2】:
  • 坚持使用 png 图像格式。
  • 确保将您的图像复制到 android项目上的资产目录。(如果 您在 Resources 目录中有图像)。

【讨论】:

  • 感谢您的回复,我已将图像转换为 png 并且它位于 assets 目录中。但同样的错误发生
【解决方案3】:

尝试对您的图像进行故障排除。

  • 获取“HelloWorld.png”并在您使用的任何图像编辑器中对其进行修改。如果它有效,那么您就知道它不是您的编辑器。
  • 尝试将背景图片设置为与“HelloWorld.png”相同的大小,并采用与“HelloWorld.png”相同的默认设置为 PNG 格式

还要确保“HelloWorld.png”在您的 Assets 目录中,否则您可能需要通过 CCFileUtils 将 Assets 目录添加到搜索路径中

祝你好运!

【讨论】:

  • 谢谢。我实际上想到并尝试了这个,虽然不是你说的全部。让我再看一遍。顺便问一下,“通过 CCFileUtils 将 Assets 目录添加到搜索路径”是什么意思?如何在代码中实现它?
  • 可以设置或添加cocos为其资源目录设置的搜索路径。例如对于 win32,它将是 CCFileUtils::sharedFileUtils()->addSearchPath("../../Assets") 但是这应该默认设置。如果 helloworld.png 在 Assets 文件夹中,那么它已经设置好了。编辑:我看到问题已得到解答,我正在开发 win32,我自己不为 android 构建。
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 2014-12-09
  • 2017-01-20
相关资源
最近更新 更多