摘要:借助GYP將libpomelo連接到Cocos2d-x項目并使項目能與服務端成功連接。 配置:OS X 10.9.4 Xcode 6.0 Cocos2d-x-3.2 方法一:http://cn.cocos2d-x.org/tutorial/show?id=1561 一、部署GYP(Generate Your Projets) 1、下載GYP項目 終端轉(zhuǎn)到要安裝GYP項
摘要:借助GYP將libpomelo連接到Cocos2d-x項目并使項目能與服務端成功連接。
配置:OS X 10.9.4 + Xcode 6.0 + Cocos2d-x-3.2
方法一:http://cn.cocos2d-x.org/tutorial/show?id=1561
一、部署GYP(Generate Your Projets)
1、下載GYP項目
終端轉(zhuǎn)到要安裝GYP項目的目錄后,執(zhí)行如下命令:
1 |
|
也可以直接下載:gyp.zip
2、打開終端切換至root權(quán)限
1 |
|
回車后需要輸入本機用戶密碼(就是電腦登陸密碼)。輸入時不會有視覺反饋(不會顯示出星號)。
3、進入GYP項目目錄進行setup
1 |
|
二、部署libpomelo
1、下載libpomelo項目
1 |
|
也可以直接下載:libpomelo-master.zip
2、生成libpomelo的Xcode項目
編譯Mac端
1 2 |
|
編譯iOS端
1 2 |
|
編譯iOS模擬器端
1 2 |
|
可能出現(xiàn)的錯誤
Q | 錯誤提示:
xcodebuild: error: SDK "iphonesimulator6.1" cannot be located.
A | 解決方法:
打開build_iossim文件,將模擬器版本改為所需版本。
3、編譯運行l(wèi)ibpomelo的Xcode項目
打開生成的pomelo.xcodeproj文件,編譯運行。
4、打包靜態(tài)庫文件
對libpomelo進行編譯后會產(chǎn)生幾個靜態(tài)庫文件。如果想要同時針對多平臺進行開發(fā),那么可以將針對不同平臺的同名靜態(tài)庫文件打包在一起。
編譯所生成的靜態(tài)庫文件有以下三種,分別放在如下文件夾的子文件夾中:
libpomelo->build下的libpomelo.a
libpomelo->deps->jansson->build下的libjansson.a
libpomelo->deps->uv->build下的libuv.a
例如文件libpomelo.a所處的目錄結(jié)構(gòu)如下
通過如下命令可以將圖片中藍色選中的兩個文件合并打包到新的路徑下。
1 |
|
靜態(tài)庫文件打包后的效果如下圖:
5、對libpomelo刪繁就簡
在項目中新建一個lib文件夾,將合成的靜態(tài)庫文件統(tǒng)一放進去。對于項目的其他部分,只需保留如下的幾個文件夾文件:
libpomelo->include
libpomelo->deps->jansson->src
libpomelo->deps->uv->include
處理后的目錄結(jié)構(gòu)示例如下:
三、將靜態(tài)庫導入Cocos2d-x項目
1、創(chuàng)建一個Cocos2d-x項目
Cocos2d-x項目的創(chuàng)建參考Mac下搭建Cocos2d-x v3.2的開發(fā)環(huán)境。
2、將libpomelo添加到Cocos2d-x項目中
在XCode中右擊項目,Add Files to “XXX”,按下圖添加libpomelo文件夾:
3、添加靜態(tài)庫文件
點擊項目的Target,選擇Build Phases選項卡,找到Link Binary With Libraries,
點擊+,點擊Add Other…,
將導入的libpomelo項目中三個靜態(tài)文件添加進去。
4、添加頭文件搜索路徑
切換到Build Settings選項卡,找到Search Paths條目,在User Header Search Paths和Library Search Paths中分別加入3項,分別是libpomelo文件夾下include,deps->jansson->src和deps->uv->include這三個文件夾的絕對路徑。
可以采用相對路徑的方式添加,將以下三行加入即可:
${PROJECT_DIR}/libpomelo/include
${PROJECT_DIR}/libpomelo/deps/uv/include
${PROJECT_DIR}/libpomelo/deps/jansson/src
${PROJECT_DIR}是Xcode提供的環(huán)境變量,代表項目所在路徑。
Tip:為了獲取文件夾的絕對路徑,先將項目中的文件夾用Finder打開,再將文件夾拖動到終端,即可。
5、添加庫文件搜索路徑
同樣在Search Paths條目中,找到Library Search Paths項,加入上述三個路徑。
四、驗證
在項目中添加一段代碼來驗證libpomelo已經(jīng)安裝成功。本例所使用的服務器端為chatofpomelo-websocket。
1、運行服務器端
1)下載chatofpomelo-websocket
1 |
|
2)安裝依賴項
1 |
|
3)運行g(shù)ame-server
在終端進入chatofpomelo-websocket項目下的game-server文件夾。執(zhí)行:
1 |
|
2、運行客戶端
1)添加頭文件
在HelloWorldScene.cpp文件中添加頭文件
1 |
|
2)添加測試代碼
在init()函數(shù)中添加如下代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
代碼可參考pomelo客戶端開發(fā)。
3)編譯運行項目
若運行項目后在output中輸出cocos2d: ***** Connection Succeed! *****,說明libpomelo配置成功。
可能出現(xiàn)的錯誤
Q | 錯誤提示:
Undefined symbols for architecture x86_64:
"_FSEventStreamCreate",
referenced from:_uv__fsevents_init in libuv.a(fsevents.o)
"_FSEventStreamInvalidate",
referenced from: _uv__fsevents_close in libuv.a(fsevents.o)
"_FSEventStreamRelease",
referenced from: _uv__fsevents_close in libuv.a(fsevents.o)
"_FSEventStreamScheduleWithRunLoop",
referenced from: _uv__fsevents_schedule in libuv.a(fsevents.o)
"_FSEventStreamStart",
referenced from: _uv__fsevents_schedule in libuv.a(fsevents.o)
"_FSEventStreamStop",
referenced from: _uv__fsevents_close in libuv.a(fsevents.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
A | 解決方法:
針對Mac,在Build Settings選項中的Linking條目下的Other Linker Flags中添加
-framework CoreFoundation
-framework CoreServices
針對iOS,不需要添加上述Flags。
參考源:Libraries to compile libuv on OS X
五、參考鏈接
1、Mac下編譯libpomelo靜態(tài)庫,并在Cocos2d-x項目中引用(講解十分詳細,圖文豐富)
2、libpomelo官方README文檔(有較大參考價值)
3、pomelo客戶端開發(fā)(同樣屬于官方文檔,是鏈接2的中文版)
4、Mac下Cocos2d-x連接pomelo服務器(寫得比較簡潔,把必要的部分都寫進去了)
5、遷移到Mac(如果有些意外情況可嘗試參考,該文價值量較低)
6、手把手教你把pomelo客戶端組件libpomelo加入Cocos2d-x 3.0項目(Windows、Android、iOS平臺)(官方文檔,添加組件的另一種方式,相對比較繁瑣)
來源網(wǎng)址:http://www.cnblogs.com/tangyikejun/p/3988724.html
方法二:http://www.cnblogs.com/yangxq/p/3791682.html
最近在學習cocos2dx的過程中需要和服務器進行交互,所以這幾天在學習libpomelo靜態(tài)庫的編譯和使用。之前在windows系統(tǒng)下編譯libpomelo,并在VS中引入比較順利;但是,目前對Mac系統(tǒng)和XCode不是很熟悉,所以多花了些時間。不過,最終還是成功了,在這里就將我編譯引入libpomelo靜態(tài)庫的過程記錄下來,也分享給和我一樣遇到問題的朋友們。
libpomelo下載地址:https://github.com/NetEase/libpomelo或者http://pan.baidu.com/s/1B2o8Y,下載解壓后目錄結(jié)構(gòu)為
此時,我們需要通過gyp來生成工程文件并進行編譯,從官網(wǎng)下載gyp速度非常慢,這是我從其他地方下載到的,分享給大家http://pan.baidu.com/s/1hqmn3N2,不能保證是最新版的,下載解壓后得到
下面開始安裝gyp,大家看到setup.py應該知道這個python文件應該和安裝有關(guān),使用help命令查看相關(guān)信息,發(fā)現(xiàn)build和install命令可用于編譯和安裝
下面進行編譯
安裝時,由于存在權(quán)限問題,所以需要加上sudo命令來提升權(quán)限,同時需要輸入密碼
gyp安裝成功后,我們的準備工作就做好了。
在終端使用如下命令:
./pomelo_gyp -DTO=ios ./build_ios ./build_iossim
首先,進入剛剛下載的libpomelo目錄,然后開始編譯ios設備靜態(tài)庫
編譯靜態(tài)庫成功!
接下來開始編譯ios虛擬機的靜態(tài)庫
這里出現(xiàn)了錯誤,是因為我的xcode中沒有安裝IOS6.1的虛擬機。點擊xcode下的Preferences菜單項,切換到Downloads選項卡,如下,安裝虛擬機
這里我沒有等待安裝完成,直接切換到另一個已安裝虛擬機的系統(tǒng)下,后面的“√”表示已安裝
現(xiàn)在重新編譯,編譯成功
現(xiàn)在我們可以查看編譯生成的靜態(tài)庫文件
libpomelo->build下:
libpomelo->deps->jansson->build下:
libpomelo->deps->uv->build下:
此時,靜態(tài)庫文件已經(jīng)成功編譯,共有6個.a文件。
在終端使用如下命令:
lipo -create 文件1 文件2 -output 新文件
我們可以把ios設備(arm)和ios虛擬機(i386)的靜態(tài)庫用lipo命令打包在一起,方便我們使用。
輸入上述命令后,在libpomelo目錄下會生成3個打包后的.a文件
此時,我們就可以在項目中使用這3個靜態(tài)庫了。
接下來,將需要的靜態(tài)庫及相關(guān)頭文件提取出來。將libpomelo->include文件夾、libpomelo->deps->jansson->src文件夾、libpomelo->deps->uv->include文件夾下的文件保留,另外將3個.a文件放于新建的目錄lib中,最終的目錄結(jié)構(gòu)如下
將上面包含靜態(tài)庫和頭文件的目錄加入項目中,在XCode中右擊項目,“Add Files to XXX”,選擇上面的目錄,然后添加
此時在我們的項目中可以看到剛剛添加的目錄
然后,點擊項目的Target,選擇“Build Phases”選項卡,找到“Link Binary With Libraries”
點擊“+”,點擊“Add Other…”,選擇3個靜態(tài)庫,點擊Open按鈕
此時,靜態(tài)庫已加入到項目中
現(xiàn)在,我們切換到“Build Settings”選項卡,找到“Search Paths”,在“Header Search Paths”和“Library Search Paths”中分別加入3項,分別是libpomelo中的include,deps->jansson->src和deps->uv->include的物理路徑。
然后,關(guān)閉XCode,重新打開項目,編譯。此時在”jansson.h”中會報錯
我們將此處的尖括號改為引號,“hashtable.c”也做同樣處理,再次編譯,編譯成功。
現(xiàn)在我們就可以在項目中使用libpomelo庫提供的服務了。
首先,我們在AppDelegate.cpp中引入頭文件#include “pomelo.h”,然后編譯,此時在”map.h”中又有錯誤
將其改為#include “ngx-queue.h”就可以了,再次編譯,編譯成功!
這些頭文件引用的問題相信大家都能搞定(可能你遇到的問題和我不一樣,但應該都是小問題)。
我們在程序中加入如下代碼:
編譯成功后,運行程序,控制臺輸出如下,此時由于沒有服務器,所以連接失敗。
接下來,在VM虛擬機中打開pomelo服務器,將其激活。然后我們在MAC下的瀏覽器中輸入ip和端口,查看服務器狀態(tài)處于激活狀態(tài)(我用的服務器代碼在這里https://github.com/NetEase/chatofpomelo-websocket,當然代碼中的ip和端口需要自己修改)
再次運行我們的程序,控制臺輸出如下
至此,我們已經(jīng)成功編譯了libpomelo靜態(tài)庫,將其引入項目,并測試連接pomelo服務器成功!
備注3:http://blog.csdn.net/hsyj_0001/article/details/9751819最近聽說pomelo這個開源的游戲服務器框架不錯,文檔也比較詳細(這都是聽說,實際上.....還是接著往下看吧)于是拿來研究研究。因為做iphone游戲的緣故,所以打算在Mac OS X上安裝,按照官方的文檔指南,pomelo終于安裝成功,除了node.js在安裝過程中出過一些意外還是比較順利。
接下來在安裝客戶端libpomelo庫時按照官方地址https://github.com/NetEase/libpomelo提示的方法卻發(fā)生了各種問題。作為一個開源產(chǎn)品只有自己會用其他人都無法編譯安裝,怎么能擴大推廣呢,真尼瑪坑爹啊。
首先,官方提示前提要安裝GYP。GYP是個啥???干嘛用的?去哪下載?如何安裝?
先從GYP鏈接的地址把GYP下載下來
[plain] view plaincopy
下面開始正式編譯libpomelo庫,首先執(zhí)行g(shù)it clone https://github.com/NetEase/libpomelo.git命令下載源代碼.(如果git命令在Mac系統(tǒng)中是內(nèi)置的,如果在windows環(huán)境下需要安裝)。執(zhí)行cd libpomelo命令進入下載的源代碼目錄,根據(jù)官方的指南編譯ios環(huán)境下的庫./pomelo_gyp -DTO=ios,但是會顯示錯誤信息:python: can't open file '/usr/local/bin/gyp_main.py': [Errno 2] No such file or directory,這明顯是安裝GYP過程中g(shù)yp_main.py文件沒有安裝成功。所以根據(jù)網(wǎng)上的一些解決辦法,我將GYP目錄拷貝到libpomelo目錄下,然后執(zhí)行./gyp-read-only/gyp --depth=. pomelo.gyp -Dlibrary=static_library -DTO=ios,終于構(gòu)建成功,其實這條指令就是pomelo_gyp中的內(nèi)容,只不過由于目錄層次的問題,我單獨在外面直接執(zhí)行罷了。
下面開始按照指南的說明執(zhí)行./build_iossim編譯靜態(tài)庫時發(fā)現(xiàn)報錯,沒有找到指定的sdk6.1,于是在網(wǎng)上各種百度各種谷歌,就是沒有發(fā)現(xiàn)解決方法,唯一有過相似遭遇的解決方法是拿到其他XCode5的機器上編譯,這種解決方法不徹底也不科學。于是用pico build_iossim命令打開編譯配置文件看看到底是什么原因。原來編譯參數(shù)-sdk iphonesimulator6.1指定的版本在我的開發(fā)環(huán)境中過高,我本地使用sdk只有5.0,所以將該文件中的6.1全部改為5.0再執(zhí)行Ctrl+X退出編譯狀態(tài),再執(zhí)行./build_iossim命令便可編譯成功。
很難想象網(wǎng)易這樣的一個產(chǎn)品說明竟然做得這么簡單,除了參與開發(fā)的人員能夠熟練構(gòu)建開發(fā)環(huán)境診斷一些問題,像我們一些剛剛接觸入門的開發(fā)者來說很難入手。
建議網(wǎng)易完善一下環(huán)境構(gòu)建手冊和開發(fā)手冊,文檔不是寫給自己看的,是寫給沒有接觸這些產(chǎn)品的開發(fā)者閱讀的,所以要設身處地從入門者的角度出發(fā),甚至可以把讀者設想為0基礎(chǔ)的開發(fā)者,step-by-step地指導開發(fā),這樣才能更好地推廣這套產(chǎn)品。
后面抽時間把libpomelo添加到cocos2d-x的項目工程中,嘗試調(diào)通client和Server端通信。
教程連接:
http://www.cnblogs.com/yangxq/p/3791682.html
https://github.com/NetEase/pomelo/wiki/pomelo%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BC%80%E5%8F%91
http://cn.cocos2d-x.org/tutorial/show?id=1561
https://github.com/NetEase/pomelo/wiki/Home-in-Chinese
、Mac下編譯libpomelo靜態(tài)庫,并在Cocos2d-x項目中引用(講解十分詳細,圖文豐富)
2、libpomelo官方README文檔(有較大參考價值)
3、pomelo客戶端開發(fā)(同樣屬于官方文檔,是鏈接2的中文版)
4、Mac下Cocos2d-x連接pomelo服務器(寫得比較簡潔,把必要的部分都寫進去了)
5、遷移到Mac(如果有些意外情況可嘗試參考,該文價值量較低)
6、手把手教你把pomelo客戶端組件libpomelo加入Cocos2d-x 3.0項目(Windows、Android、iOS平臺)(官方文檔,添加組件的另一種方式,相對比較繁瑣)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com