首页 > Personal > cocos2d-x > cocos2d-x: 关于使用c++11的特性如std::function,std::bind
2013
12-20

cocos2d-x: 关于使用c++11的特性如std::function,std::bind

今天谢了一些功能需要用到c++11的std::function和std::bind,开发的时候是用windows的,include好头文件就没问题了,编译android的话也只要在pro.android/jni文件夹的Android.mk文件中加入LOCAL_CPPFLAGS += -std=gnu++0x也就没有问题了(要使用std多线程相关需要换为-std=c++11)。问题是回家后mac和ios的xcode设置,好了好长时间才找到解决办法。
ios下把自己的工程和cocos2dx的工程都做同样配置,工程属性中从Basic改为All,才能看见需要修改的属性。Build Settings->Deployment->IOS Deployment Target 选择5.0以上,因为libc++至少需要5.0。Build Settings->Apple LLVM 5.0 -Language – C++->C++ Language Dialect选择GNU++11(–std=gnu++11),c++11应该也可以。Build Settings->Apple LLVM 5.0 -Language – C++->C++ Standard Library选择libc++,提示有c++11支持的。再在Build Phases->Link Binary With Libraries里面添加libc++.dylib,点+号再搜索libc++就能找到。确保配置两个工程的Targets属性而不是product属性,当然product属性也可以修改为一样的。clean,build就可以编过了。自己的工程和cocos2dx的工程一定要全部配置一样的属性。因为如果是链接出错的错误一般都是出在std::string上,而libc++的实现和标准库的实现是不过一样的,如果不出链接错误,会在运行是crash,所以libc++会把std::string定义到std::__1::bash_string产生链接错误而避免运行异常,这个也是在google上查到的。
mac下配置类似,只是Deployment Target选择的是OS X 10.7,其他的都一样,也是确定是配置的两个工程的Targets属性。clean,build就可以了。

最后编辑:
作者:wy182000
这个作者貌似有点懒,什么都没有留下。

留下一个回复