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閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容