Xcode6 和 Cocos2dx3.1以下版本的不兼容问题

昨天升级了一下Xcode6,遇到了两个问题。

第一个,无法准确识别IOS device。始终显示为Unavailable。

这个问题呢..应该是Xcode6Beta版本的小故障,当年Xcode5刚出来的时候也这样。你可以选择将Xcode退出,确保手机已经连接上Mac,再次启动Xcode来解决这个问题。

当然如果这个办法无法解决问题,你也可以通过将iTunes升级到最新版本来解决这个问题。

第二个问题,cocos2dx3.1以下版本在Xcode6的IOS框架下编译出错,主要是三个Error

编译器告诉我们在libcocos2dx——也就是cocos2dx库中用到的_fwrite$UNIX2003以及_strerror$UNIX2003未被定义。

那么我们可以猜测,这次的Xcode升级有可能将原有的这两个类C语言模块从UNIX内核里删掉了(不要问为什么会出现UNIX...因为mac OS就是一个做的比较漂亮的Unix而已..)

我们可以通过extern""的方式对他们进行定义

extern "C"{

    size_t fwrite$UNIX2003( const void *a, size_t b, size_t c, FILE *d )

    {
        return fwrite(a, b, c, d);
    }

    char* strerror$UNIX2003( int errnum )
    {
        return strerror(errnum);
    }
}

——————————————————————————————————————————————————————————————————————

插播一段C语言小知识

被extern限定的函数或变量是extern类型的。extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int
v,就可以在a.c中声明externint v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c中声明externint v,还取决于变量v本身是能够被引用到的。这涉及到c语言的另外一个话题--变量的作用域。能够被其他模块以extern修饰符引用到的变量通常是全局变量。还有很重要的一点是,externint v可以放在a.c中的任何地方,比如你可以在a.c中的函数fun定义的开头处声明extern int v,然后就可以引用到变量v了,只不过这样只能在函数fun作用域中引用v罢了,这还是变量作用域的问题。对于这一点来说,很多人使用的时候都心存顾虑。好像extern声明只能用于文件作用域似的。

所以被extern "C"修饰的变量和函数是按照C语言方式编译和连接的;
未加extern“C”声明时的编译方式。
首先看看C++中对类似C的函数是怎样编译的。
作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:
void foo( int x, int y );
该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。例如,在C++中,函数void foo( int x, int y )与void foo( int x, float y )编译生成的符号是不相同的,后者为_foo_int_float。

所以我们上面这段代码的作用就是将这两个未定义函数定义成全局可以访问。

这样我们的问题就解决啦。当然还是推荐使用最新的cocos2dx,不要为了旧版本耽误过多时间

时间: 2024-10-25 08:27:36

Xcode6 和 Cocos2dx3.1以下版本的不兼容问题的相关文章

解决各版本不同浏览器兼容行的CSS Hack

/* CSS属性级Hack */ color:red; /* 所有浏览器可识别*/ _color:red; /* 仅IE6 识别 */ *color:red; /* IE6.IE7 识别 */ +color:red; /* IE6.IE7 识别 */ *+color:red; /* IE6.IE7 识别 */ [color:red; /* IE6.IE7 识别 */ color:red\9; /* IE6.IE7.IE8.IE9 识别 */ color:red\0; /* IE8.IE9 识别*

Python爬虫教程-27-Selenium Chrome版本与chromedriver兼容版本对照表

我们使用Selenium+Chrome时,版本不一样, 会导致 chromedriver 停止运行 chromedriver 所有版本下载链接:http://npm.taobao.org/mirrors/chromedriver/ 请根据下面表格下载支持自己 Chrome 的版本 Selenium Chrome版本与chromedriver兼容版本对照表 ChromeDriver 版本 支持的 Chrome 版本 ChromeDriver v2.41 (2018-07-27) Supports

cocos2d-x3.3 以前版本 工程Xcode6编译时的问题

Undefined symbols for architecture i386: "_fwrite$UNIX2003", referenced from: _unixErrorHandler in libcocos2dx iOS.a(tif_unix.o) _unixWarningHandler in libcocos2dx iOS.a(tif_unix.o) _empty_output_buffer in libcocos2dx iOS.a(jdatadst.o) _term_des

转 。。。。一个不规则的按钮 虽然已经不适用于cocos2dx3.0以上版本 but思路就应该是这个样子滴

本篇文章主要讲一下怎么做一个不规则的按钮,比如如下图的八卦,点击绿色和点击红色部分,需要执行不同的事件 一般情况下,如果要检测某一个精灵是否被点中,做法如下 bool HelloWorld::ccTouchBegan(cocos2d::CCTouch* pTouch, cocos2d::CCEvent* pEvent) { CCSize sprSize = pSpr->getContentSize(); CCPoint point = pSpr->convertTouchToNodeSpace

高版本api在低版本中的兼容

直接上例子,看如何避免crash. eg:根据给出路径,获取此路径所在分区的总空间大小. 文档说明:获取文件系统用量情况,在API level 9及其以上的系统,可直接调用File对象的相关方法,以下需自行计算 API level 9及其以上,调用 File.getTotalSpace() 即可, 但是在API level 8 以下系统File对象并不存在此方法 //如下 /** * Returns the total size in bytes of the partition contain

用条件注释判断浏览器版本解决页面兼容问题

在IE8.IE9上可能好好的,当我们在IE6.IE7或者是其他的浏览器上再浏览这些页面时,可能会发现我们的页面已经面目全非了,那么如何解决兼容问题呢,本文就为大家一一道来对于浏览器兼容问题,我们应该碰到很多了,在平时写一些页面时,在IE8.IE9上可能好好的,当我们在IE6.IE7或者是其他的浏览器上再浏览这些页面时,可能会发现我们的页面已经面目全非了,作为一名前端开发人员,这是最让人发疯的问题了,那么我们该怎么解决这些问题呢? 首先,我们写的页面在不同的浏览器上之所以会出现表现不同的问题,是因

【小捕快上线】Springboot在2.1.5版本下的兼容问题排查

问题出现流程记录:用Eclipse4.7.2版本直接建立了一个Springboot,在建的过程中直接选的是2.1.5的版本,里面只是选择了web.web-service,无奈写好controller之后,都没有走到controller进程就结束了,掉到坑里了吗? 下面是爬坑的过程: 1.先确定代码过程,用最简单的demo,提示Start Application in xx S,进程自动关闭了 2.mvn update多次,强制更新下载,还是不行 3.开始查是不是tomcat和2.1.5的版本有兼

解决spring-boot 各版本包冲突兼容的方法

思路        在微服务盛行的当下,spring boot 流行程度已经家喻户晓.但同时,随着spring boot 快速迭代,出现了很多版本,比如当前已经推出了2.2.x-SNAPSHOT/ ,不同版本的spring boot 对配套使用的spring 组件.第三方组件的版本是有要求. 在我们平时的开发中,需要集成某些spring boot功能时,偶尔会遇到包版本冲突,我们虽然知道版本冲突了,但却不知道该使用哪个版本?此时,如果我们可以根据自己使用的spring boot版本,然后去查询冲

老版本上的兼容ripple效果以及通用selecter

因为L上绘制动画用在新的render线程上.故不能在5.0一下实现ripple效果,可我们实现类似的效果是可以的.当然也可以作为一个通用的selector.这样省去了两张图片的麻烦. <?xml version="1.0" encoding="utf-8"?> <!--drawable/btn_feed_action.xml--> <selector xmlns:android="http://schemas.android.