Ubuntu下搭建Cocos2d-x-3.4 / Cocos2d-x-3.6开发环境

前言

我这个blog是边操作边记录的,到了最后一步,眼看要成功了,却发现最后Link的时候还有问题解决不了,这时候其实已经快写完了。然后我发现同样的操作,搭建Cocos2dx 3.6是完成可以成功的。我不想把blog写成一遍完整的教学文章,而只想真实地记录所有的挫折以及所有的成功经验,所以原来写的就不改了,将错就错地看吧。

如果你想看3.6的搭建经验,可以一直看下去,只要把文章中所有3.4的地方换成3.6就行了。

一些废话

最近公司业务需求,要将一个以前用cocos2dx 3.2开发的游戏,换皮、换语言包,然后准备发布到外国去,荼毒外国人民。

我Windows机器上的Cocos环境早就升级到了Cocos2dx 3.12以及Cocos Creator1.3.3,实在不想破坏原来的环境,又懒得再弄一台Windows机器重新部署,于是把主意打到了现在用的这台Ubuntu 16.04的电脑上。

是的,就是那么牛叉:有两台电脑,用一台玩一台。但是没有Mac电脑,略汗。

很早前就想过在Linux上做游戏开发了,现在来了一了这个心愿吧。

但是3.2毕竟太老了,手上还有几个项目是用3.4开发的,都用到了已被触控科技放弃的CocosStudio技术,需要解决同样的一些问题,去填同样的坑。为了避免以后公司突发奇想又要弄那几个3.4的项目,我这次还是直接搭建3.4的环境为好。

准备工作

如果做Android开发,首先应该安装JavaSdk, Ndk, Ant等工具。如果做ios开发,抱歉你不需要看这篇文章,ios开发必须用ios系统。

早期3.2时代都是在Eclipse下开发的,用官方提供的ADT(Android Devlopment Tools),然后JDK,NDK等都需要自己下载配置。但是现在这个时代,大家都用Android Studio了,虽然偶没用过,但也必须学啊。Android Studio配置好以后,会自动下载安装这些需要的东东,目录结构跟自己弄的会有点不同。大概都在~/Android/Sdk目录下。另外,Ant我是提前安装好的,非常简单: sudo apt install ant 就搞定了。具体Ubuntu下如何安装配置Android Studio,可百度或者等我有空再来码一篇。

后记:经过编译Android实测,Android Studio自动加载的Ndk版本太高,并不兼容,只能自己手动安装Ndk4.8。后面提到的NDK ROOT必须设置成自己安装的路径

然后下载cocos2dx-3.4,我原来就下载好的,貌似现在官网上已找不到。在当前用户目录下建立一个Devlop的目录,将下载好的cocos2dx-3.4文件解压放进这个目录。

安装前还要做一些准备工作,因为cocos比较坑,linux下的sh文件没有开执行权限,如下所示将三个shell命令文件的权限设置好。

cd ~/Devlop/cocos2d-x-3.4/tools/cocos2d-console/bin
chmod +x cocos

cd ~/Devlop/cocos2d-x-3.4/tools/travis-scripts
chmode +x install_glfw.sh

cd ~/Devlop/cocos2d-x-3.4/build
chmod +x install-deps-linux.sh

开始安装

1.安装依赖环境:

cd ~/Devlop/cocos2d-x-3.4/build
./install-deps-linux.sh

开始时会提示:

More info: https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test
Press [ENTER] to continue or ctrl-c to cancel adding it

按回车继续直到安装完成。

2.配置cocos运行环境:

cd ~/Devlop/cocos2d-x-3.4
python setup.py

中间会提示:

->Please enter the path of NDK_ROOT (or press Enter to skip):

可在此输入你配置好的NDK路径或者先回车跳过,回头配置好后在.bashrc中添加。

完了之后打开~/.bashrc看看:

vim ~/.bashrc

翻到最后,大概这个样子:


Screenshot from 2017-02-09 13-59-21.png

上面三行应该是Android Studio建立的,后面是cocos的setup.py建立的。
我们发现最后两行跟前三行完全一个意思,果断注释了。

最后

source ~/.bashrc

让这个配置立马生效。

测试工程

cd ~/Devlop
cocos new myTest -p com.myCompany.myTest -l cpp

大概显示回应如下:

Running command: new
Copy template into /home/ace/Devlop/myTest
Copying cocos2d-x files...
Rename project name from 'HelloCpp' to 'myTest'
Replace the project name from 'HelloCpp' to 'myTest'
Replace the project package name from 'org.cocos2dx.hellocpp' to 'com.myCompany.myTest'
Replace the mac bundle id from 'org.cocos2dx.hellocpp' to 'com.myCompany.myTest'
Replace the ios bundle id from 'org.cocos2dx.hellocpp' to 'com.myCompany.myTest'

这样,在~/Devlop目录下就新生成了一个MyTest目录,这就是我们的测试工程了。cocos这个生产环境做得很好啊,不但可以new一个新的工程,也可以直接在终端里面编译运行,如果不调试修改,完全不需要什么IDE。或者,vim做编辑器也是可以的啊。废话少说,开始编译:

cd ~/Develop/myTest
cocos compile -p linux

然后我们发现报错了:

/home/ace/Devlop/myTest/cocos2d/cocos/2d/CCActionCamera.cpp:193:22: error: ‘isnan’ was not declared in this scope
if( isnan(_radius) )
^

坑爹的cocos for linux。调出我们强大的编辑器vim,冒号193:

vim /home/ace/Devlop/myTest/cocos2d/cocos/2d/CCActionCamera.cpp
ace@Ace-Server: ~-Devlop-myTest_001.png

将这里三个isnan修改为:std::isnan

再次编译,忽略各种警告(坑爹的cocos!),并不漫长的编译过程后,又出现同样的错误:

/home/ace/Devlop/myTest/cocos2d/extensions/GUI/CCControlExtension/CCControlUtils.cpp:95:26: error: ‘isnan’ was not declared in this scope
if (isnan(value.h)) // value.h == NAN

好吧我知道会错的,编译过程无非就是Debug。再次vim并冒号95

vim /home/ace/Devlop/myTest/cocos2d/extensions/GUI/CCControlExtension/CCControlUtils.cpp

这里就一个isnan,改成std::isnan就行了。

再次编译,纳尼?还有错?

/usr/bin/ld: lib/libcocos2d.a(CCDevice-linux.cpp.o): undefined reference to symbol 'XOpenDisplay'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

百度看了好多技术文章,暂时找不到头绪如何解决这个问题。
准备重新装3.6,因为在此之前我测试过3.6,解决了前面两个isnan的问题后,就大功告成了。没有太多时间去填坑了,计划将原来项目升级到3.6,只要3.6能够支持原来cocos studio1.6做的ui和armature资源就没有问题。

最后放一个cocos2dx-3.6编译成功后的运行图:

Screenshot from 2017-02-10 17-17-13.png

后续处理

别忘记将cocos2d-x-3.4 (或3.6)目录下对应的两个文件中isnan修改为std::isnan,这样以后新生成的工程文件就不会再错了。

2017-2-16补记:

如果直接修改了cocos2d-x-3.6工程目录下的isnan,新生成的win32项目就会报错,说isnan不是std的成员。稍微研究了一下,最好的修改方法是在cpp文件最前面,最后一句#include之后,加上:

#if CC_TARGET_PLATFORM == CC_PLATFORM_LINUX
#ifdef isnan
#undef isnan
#endif
#define isnan std::isnan
#endif

就是把这个文件中,linux环境下用到的isnan定义为std::isnan,同时不影响其他文件和其他运行环境。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容