摘要:借助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

处理后的目录结构示例如下:

三、将静态库导入Cocos2d-x项目

1、创建一个Cocos2d-x项目

Cocos2d-x项目的创建参考Mac下搭建Cocos2d-x-3.2的开发环境

2、将libpomelo添加到Cocos2d-x项目中

在XCode中右击项目,Add Files to “XXX”,按下图添加libpomelo文件夹:

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

MAC 下将libpomelo连接到cocos2d-x的更多相关文章

  1. Mac下编译libpomelo静态库,并在cocos2dx项目中引用

    最近在学习cocos2dx的过程中需要和服务器进行交互,所以这几天在学习libpomelo静态库的编译和使用.之前在windows系统下编译libpomelo,并在VS中引入比较顺利:但是,目前对Ma ...

  2. MAC下安装与配置MySQL

    MAC下安装与配置MySQL   MAC下安装与配置MySQL 一 下载MySQL 访问MySQL的官网http://www.mysql.com/downloads/ 然后在页面中会看到“MySQL ...

  3. cocos2d-x 3.6 mac下的试用(粒子,触摸事件,图片)

    戏说 虽然公司再如何如何,咱程序员在干好课外学习的情况下也是要努力做好本职工作的. 工作中的lua也写多了,深入了解Cocos2d-x当然还是要倒腾倒腾C++,对于一个C#用了这么多年,工作用lua的 ...

  4. cocos2d-js Mac下的JSB绑定步骤

    cocos2d-js由于采用js语言,使得做一些native的功能比较受限,例如文件和目录操作.socket操作等.逼不得已,这时我们就不得不做jsbinding了.. 官方提供的jsbinding方 ...

  5. mac下通过docker搭建LEMP环境

    在mac下通过docker搭建LEMP环境境 1.安装virtualbox.由于docker是在lxc环境的容器 2.安装boot2docker,用于与docker客户端通讯 > brew up ...

  6. mac下python2.7升级到3.6

    1. 前言 Mac系统自带python2.7,本文目的是将自带的python升级到3.6版本. 网上有本多的做法是让python2.7和python3.X两个版本共存,博主并不知道,是两版本共存好,还 ...

  7. SQL语句:Mac 下 处理myql 不能远程登录和本地登录问题

    mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES) ()里面的为she ...

  8. mac下git+maven+jenkins自动打包发布

    随着springboot+springcloud(dubbo)越来越多人使用,流行的微服务的概念越来越深入人心.分布式部署越来越复杂,给手动发布带来很大工作量.为了方便前期测试和后期线上部署更新,可使 ...

  9. 【转】Mac下升级python2.7到python3.6

    1. 前言 Mac系统自带python2.7,本文目的是将自带的python升级到3.6版本. 网上有本多的做法是让python2.7和python3.X两个版本共存,博主并不知道,是两版本共存好,还 ...

随机推荐

  1. CF600E Lomsat gelral (启发式合并)

    You are given a rooted tree with root in vertex 1. Each vertex is coloured in some colour. Let's cal ...

  2. HDU-6114

    車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車--他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数.他经过思考,得出了 ...

  3. TVP5150 PAL/NTSC ccd cmos 模拟摄像头视频 转换 VGA输出

    新做了一批 视频模块,特此总结下: 解码ic:tvp5150 输入:CVBS  PAL 输出:DVP(bt565  yuv  dvp8  含vs hs) 测试分辨力:(vga输出 640*480) 实 ...

  4. Linux环境(服务器)下非root用户安装Python3.6

    Linux环境(服务器)下非root用户安装Python3.6 在管理实验室集群时候,遇到的问题--非root用户在搭建自己环境时候,如何搭建. 注意: root用户的根目录是root,非root用户 ...

  5. VMware Centos中创建克隆虚拟机导致网卡设备无法启动的问题

    一.前言 在创建克隆虚拟机的时候,如果样板虚拟机没有事先配置好,则会导致网卡设备无法启动的问题(报错如下). Bringing up interface eth0: Device eth0 does ...

  6. nginx代理grafana

    希望通过Nginx为服务器上的grafana进行代理,实现通过在当前域名后加/grafana在公网进行访问,开始按照百度的方法弄了几个小时都不行,后面仔细看了官方的文档才弄好,Mark一下. Ngin ...

  7. Test 1023 T1&T2

    T1 popust (贪心 TimeLimit: 1000MS Memory Limit: 32768KB ​ 米尔科饿了如熊,偶然发现当地一家餐馆.餐厅提供\(n\)种餐,有一个有趣的定价政策:每种 ...

  8. JS基础知识——变量类型和计算(一)

    JS中使用typeof能得到的哪些类型? 何时使用===何时使用==? JS中有哪些内置函数? JS变量按照存储方式区分为哪些类型,描述其特点? 如何理解JSON? 知识点梳理 一.变量类型: (1) ...

  9. UWP 打开系统设置面板

    由于UWP各种权限管理的比较严格,所以在执行某一个特殊的操作之前,最好先申请一下相应的权限,以便告知用户你使用了这个权限,而且可以有效的避免App崩溃. 比如你想让用户手动打开麦克风权限,那么可以执行 ...

  10. 在项目中在线使用Iconfont图标

    Iconfont真的很强大,图标数量惊人,基本任意的关键词都能搜索到你想要的结果.而且是国产的,网速会比较快,还可以改变图标颜色. 它提供svg.png.ai三种格式下载,之前我一直都是乖乖的一个个下 ...