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.alibpomelo->deps->jansson->build下的libjansson.alibpomelo->deps->uv->build下的libuv.a
例如文件libpomelo.a所处的目录结构如下

通过如下命令可以将图片中蓝色选中的两个文件合并打包到新的路径下。
$ lipo -create [filePath1] [filePath2] -output [pathOfNewFile]
静态库文件打包后的效果如下图:

5、对libpomelo删繁就简。
在项目中新建一个lib文件夹,将合成的静态库文件统一放进去。对于项目的其他部分,只需保留如下的几个文件夹文件:
libpomelo->includelibpomelo->deps->jansson->srclibpomelo->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 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打开,再将文件夹拖动到终端,即可。
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。
五、参考链接
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的更多相关文章
- Mac下编译libpomelo静态库,并在cocos2dx项目中引用
最近在学习cocos2dx的过程中需要和服务器进行交互,所以这几天在学习libpomelo静态库的编译和使用.之前在windows系统下编译libpomelo,并在VS中引入比较顺利:但是,目前对Ma ...
- MAC下安装与配置MySQL
MAC下安装与配置MySQL MAC下安装与配置MySQL 一 下载MySQL 访问MySQL的官网http://www.mysql.com/downloads/ 然后在页面中会看到“MySQL ...
- cocos2d-x 3.6 mac下的试用(粒子,触摸事件,图片)
戏说 虽然公司再如何如何,咱程序员在干好课外学习的情况下也是要努力做好本职工作的. 工作中的lua也写多了,深入了解Cocos2d-x当然还是要倒腾倒腾C++,对于一个C#用了这么多年,工作用lua的 ...
- cocos2d-js Mac下的JSB绑定步骤
cocos2d-js由于采用js语言,使得做一些native的功能比较受限,例如文件和目录操作.socket操作等.逼不得已,这时我们就不得不做jsbinding了.. 官方提供的jsbinding方 ...
- mac下通过docker搭建LEMP环境
在mac下通过docker搭建LEMP环境境 1.安装virtualbox.由于docker是在lxc环境的容器 2.安装boot2docker,用于与docker客户端通讯 > brew up ...
- mac下python2.7升级到3.6
1. 前言 Mac系统自带python2.7,本文目的是将自带的python升级到3.6版本. 网上有本多的做法是让python2.7和python3.X两个版本共存,博主并不知道,是两版本共存好,还 ...
- SQL语句:Mac 下 处理myql 不能远程登录和本地登录问题
mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES) ()里面的为she ...
- mac下git+maven+jenkins自动打包发布
随着springboot+springcloud(dubbo)越来越多人使用,流行的微服务的概念越来越深入人心.分布式部署越来越复杂,给手动发布带来很大工作量.为了方便前期测试和后期线上部署更新,可使 ...
- 【转】Mac下升级python2.7到python3.6
1. 前言 Mac系统自带python2.7,本文目的是将自带的python升级到3.6版本. 网上有本多的做法是让python2.7和python3.X两个版本共存,博主并不知道,是两版本共存好,还 ...
随机推荐
- RT-Thread的位图调度算法分析(最新版)
RT-Thread的内核调度算法 rt-thread的调度算法为基于优先级调度和基于时间片轮转调度共存的策略.rt-thread内核中存在多个线程优先级,并且支持多个线程具有同样的线程优先级.线程级别 ...
- JS-常见数据结构
常见数据结构 这一章节我们将来学习数据结构的内容.经常会有人提问说:学习数据结构或者算法对于前端工程师有用么? 总的来说,这些基础学科在短期内收效确实甚微,但是我们首先不要将自己局限在前端工程师这点上 ...
- Python操作redis和mongoDB
一.操作redis redis是一个key-value存储系统,value的类型包括string(字符串),list(链表),set(集合),zset(有序集合),hash(哈希类型).为了保证效率, ...
- 面试题:4个zookeeper的应用场景,你知道几个?
前言 现在聊的 topic 是分布式系统,面试官跟你聊完了 dubbo 相关的一些问题之后,已经确认你对分布式服务框架/RPC框架基本都有一些认知了.那么他可能开始要跟你聊分布式相关的其它问题了. 分 ...
- 8月份21道最新Java面试题剖析(数据库+JVM+微服务+高并发)
前言 纵观几年来的Java面试题,你会发现每家都差不多.你仔细观察就会发现,HashMap的出现几率未免也太高了吧!连考察的知识点都一样,什么hash碰撞啊,并发问题啊!再比如JVM,无外乎考内存结构 ...
- 《Java基础知识》Java线程的概念
按照规划,从本篇开始我们开启『并发』系列内容的总结,从本篇的线程开始,到线程池,到几种并发集合源码的分析,我们一点点来,希望你也有耐心,因为并发这块知识是你职业生涯始终绕不过的坎,任何一个项目都或多或 ...
- 开源日志框架Exceptionless使用教程
Exceptionless是一款日志记录框架,它开源.免费.提供管理界面.易于安装和使用.ExceptionLess底层采用ElasticSearch作为日志存储,提供了快速.丰富的查询API,方便我 ...
- 面向对象的进阶(item系列,__new__,__hash__,__eq__)
面向对象的进阶(item系列,__new__,__hash__,__eq__) 一.item系列 getitem.setitem.delitem(操作过程达到的结果其实就是增删改查) class ...
- 关于爬取babycenter.com A-Z为顺序的所有英文名及其详细属性
这一次爬取的内容已经在标题里提到了,下面是详细要求及其图示: 1.首先以A-Z的顺序获取所有英文名,最后爬取该英文名的详细信息. 2.CSV的header以3中的单词为准,请别拼错.如果没有对应的数 ...
- Python:数字类型和字符串类型的内置方法
一.数字类型内置方法 1.1 整型的内置方法 作用 描述年龄.号码.id号 定义方式 x = 10 x = int('10') x = int(10.1) x = int('10.1') # 报错 内 ...