摘要:借助GYP将libpomelo连接到Cocos2d-x项目并使项目能与服务端成功连接。
配置:OS X 10.9.4 + Xcode 6.0 + Cocos2d-x-3.2
终端转到要安装GYP项目的目录后,执行如下命令:
$ svn checkout http://gyp.googlecode.com/svn/trunk/ gyp-read-only
也可以使用云盘下载(2014-06-15)。
$ sudo -i
回车后需要输入本机用户密码(就是电脑登陆密码)。输入时不会有视觉反馈(不会显示出星号)。
$ ./setup.py install
$ git clone https://github.com/NetEase/libpomelo.git
也可以使用云盘下载(2014-06-15)。
$ ./pomelo_gyp
$ xcodebuild -project pomelo.xcodeproj
$ ./pomelo_gyp -DTO=ios
$ ./build_ios
$ ./pomelo_gyp -DTO=ios
$ ./build_iossim
》 可能出现的错误
Q | 错误提示:
xcodebuild: error: SDK "iphonesimulator6.1" cannot be located.
A | 解决方法:
打开build_iossim文件,将模拟器版本改为所需版本。
打开生成的pomelo.xcodeproj
文件,编译运行。
对libpomelo进行编译后会产生几个静态库文件。如果想要同时针对多平台进行开发,那么可以将针对不同平台的同名静态库文件打包在一起。
编译所生成的静态库文件有以下三种,分别放在如下文件夹的子文件夹中:
libpomelo->build
下的libpomelo.a
libpomelo->deps->jansson->build
下的libjansson.a
libpomelo->deps->uv->build
下的libuv.a
通过如下命令可以将图片中蓝色选中的两个文件合并打包到新的路径下。
$ lipo -create [filePath1] [filePath2] -output [pathOfNewFile]
在项目中新建一个lib
文件夹,将合成的静态库文件统一放进去。对于项目的其他部分,只需保留如下的几个文件夹文件:
libpomelo
->include
libpomelo
->deps
->jansson
->src
libpomelo
->deps
->uv
->include
Cocos2d-x项目的创建参考Mac下搭建Cocos2d-x-3.2的开发环境。
在XCode中右击项目,Add Files to “XXX”
,按下图添加libpomelo
文件夹:
点击项目的Target
,选择Build Phases
选项卡,找到Link Binary With Libraries
,
切换到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提供的环境变量,代表项目所在路径。
Tip:为了获取文件夹的绝对路径,先将项目中的文件夹用Finder打开,再将文件夹拖动到终端,即可。
同样在Search Paths
条目中,找到Library Search Paths
项,加入上述三个路径。
在项目中添加一段代码来验证libpomelo已经安装成功。本例所使用的服务器端为chatofpomelo-websocket。
$ git clone https://github.com/NetEase/chatofpomelo-websocket.git
$ sh npm-install.sh
在终端进入chatofpomelo-websocket项目下的game-server文件夹。执行:
$ node app
在HelloWorldScene.cpp
文件中添加头文件
#include "pomelo.h"
在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客户端开发。
若运行项目后在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。
完稿于2014/9/23。