[轉載]MAC 下將libpomelo連接到cocos2d-x


摘要:藉助GYP將libpomelo連接到Cocos2d-x項目並使項目能與服務端成功連接。
配置:OS X 10.9.4 + Xcode 6.0 + Cocos2d-x-3.2


一、部署GYP(Generate Your Projets)

1、下載GYP項目

終端轉到要安裝GYP項目的目錄後,執行如下命令:

$ svn checkout http://gyp.googlecode.com/svn/trunk/ gyp-read-only

也可以使用雲盤下載(2014-06-15)

2、打開終端切換至root權限

$ sudo -i

回車後需要輸入本機用戶密碼(就是電腦登陸密碼)。輸入時不會有視覺反饋(不會顯示出星號)。

3、進入GYP項目目錄進行setup

$ ./setup.py install

二、部署libpomelo

1、下載libpomelo項目。

$ git clone https://github.com/NetEase/libpomelo.git

也可以使用雲盤下載(2014-06-15)

2、生成libpomelo的Xcode項目。

  • 編譯Mac端
$ ./pomelo_gyp 
$ xcodebuild -project pomelo.xcodeproj
  • 編譯iOS端
$ ./pomelo_gyp -DTO=ios
$ ./build_ios
  • 編譯iOS模擬器端
$ ./pomelo_gyp -DTO=ios
$ ./build_iossim

》 可能出現的錯誤

Q | 錯誤提示

xcodebuild: error: SDK "iphonesimulator6.1" cannot be located.  

A | 解決方法
打開build_iossim文件,將模擬器版本改爲所需版本。


3、編譯運行libpomelo的Xcode項目。

打開生成的pomelo.xcodeproj文件,編譯運行。

4、打包靜態庫文件

對libpomelo進行編譯後會產生幾個靜態庫文件。如果想要同時針對多平臺進行開發,那麼可以將針對不同平臺的同名靜態庫文件打包在一起。

編譯所生成的靜態庫文件有以下三種,分別放在如下文件夾的子文件夾中:

  • libpomelo->build下的libpomelo.a
  • libpomelo->deps->jansson->build下的libjansson.a
  • libpomelo->deps->uv->build下的libuv.a

例如文件libpomelo.a所處的目錄結構如下
此處輸入圖片的描述

通過如下命令可以將圖片中藍色選中的兩個文件合併打包到新的路徑下。

$ lipo -create [filePath1] [filePath2] -output [pathOfNewFile]

靜態庫文件打包後的效果如下圖:
打包後的效果

5、對libpomelo刪繁就簡。

在項目中新建一個lib文件夾,將合成的靜態庫文件統一放進去。對於項目的其他部分,只需保留如下的幾個文件夾文件:

  • libpomelo->include
  • libpomelo->deps->jansson->src
  • libpomelo->deps->uv->include

處理後的目錄結構示例如下:
刪繁就簡後的libpomelo目錄結構

三、將靜態庫導入Cocos2d-x項目

1、創建一個Cocos2d-x項目

Cocos2d-x項目的創建參考Mac下搭建Cocos2d-x-3.2的開發環境

2、將libpomelo添加到Cocos2d-x項目中

在XCode中右擊項目,Add Files to “XXX”,按下圖添加libpomelo文件夾:
libpomelo項目文件添加到Cocos2d-x項目

3、添加靜態庫文件

點擊項目的Target,選擇Build Phases選項卡,找到Link Binary With Libraries
路徑

點擊+,點擊Add Other…
靜態庫的位置

將導入的libpomelo項目中三個靜態文件添加進去。
添加靜態庫文件

4、添加頭文件搜索路徑

切換到Build Settings選項卡,找到Search Paths條目,在User Header Search PathsLibrary Search Paths中分別加入3項,分別是libpomelo文件夾下includedeps->jansson->srcdeps->uv->include這三個文件夾的絕對路徑。

可以採用相對路徑的方式添加,將以下三行加入``即可:

${PROJECT_DIR}/libpomelo/include
${PROJECT_DIR}/libpomelo/deps/uv/include
${PROJECT_DIR}/libpomelo/deps/jansson/src

${PROJECT_DIR}是Xcode提供的環境變量,代表項目所在路徑。

Tip:爲了獲取文件夾的絕對路徑,先將項目中的文件夾用Finder打開,再將文件夾拖動到終端,即可。

5、添加庫文件搜索路徑

同樣在Search Paths條目中,找到Library Search Paths項,加入上述三個路徑。

四、驗證

在項目中添加一段代碼來驗證libpomelo已經安裝成功。本例所使用的服務器端爲chatofpomelo-websocket

1、運行服務器端

1)下載chatofpomelo-websocket

$ git clone https://github.com/NetEase/chatofpomelo-websocket.git

2)安裝依賴項

$ sh npm-install.sh

3)運行game-server

在終端進入chatofpomelo-websocket項目下的game-server文件夾。執行:

$ node app

2、運行客戶端

1)添加頭文件

HelloWorldScene.cpp文件中添加頭文件

#include "pomelo.h"

2)添加測試代碼

init()函數中添加如下代碼

/*向服務器請求連接*/

const char * ip = "127.0.0.1";
int port = 3014; //服務器端chatofpomelo-websocket爲客戶端提供的連接端口號。

pc_client_t * pClient = pc_client_new();
struct sockaddr_in address;

memset(&address,0,sizeof(struct sockaddr_in));

address.sin_family = AF_INET;
address.sin_port = htons(port);
address.sin_addr.s_addr = inet_addr(ip);

if (pc_client_connect(pClient, &address))
{
    CCLOGINFO("***** Connection Failed! *****");
    pc_client_destroy(pClient);
}
else
{
    CCLOGINFO("***** Connection Succeed! *****");
    pc_client_destroy(pClient);
}

代碼可參考pomelo客戶端開發

3)編譯運行項目

若運行項目後在output中輸出cocos2d: ***** Connection Succeed! *****,說明libpomelo配置成功。


》 可能出現的錯誤

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靜態庫,並在cocos2dx項目中引用:講解十分詳細,圖文豐富。

2、libpomelo官方README文檔:有較大參考價值。

3、pomelo客戶端開發:同樣屬於官方文檔,是鏈接2的中文版。

4、Mac下cocos2d-x連接pomelo服務器:寫得比較簡潔,把必要的部分都寫進去了。

5、遷移到MAC:如果有些意外情況可嘗試參考,該文價值量較低。

6、手把手教你把pomelo客戶端組件libpomelo加入Cocos2d-x 3.0項目(Windows、Android、iOS平臺):官方文檔,添加組件的另一種方式,相對比較繁瑣。


完稿於2014/9/23。


原文鏈接:http://www.cnblogs.com/tangyikejun/p/3988724.html




知識共享許可協議
作者:tangyikejun
本文采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章