Mac下将libpomelo连接到Cocos2d-x的解决方案

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

终端转到要安装GYP项目的目录后,执行如下命令:

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

也可以直接下载:gyp.zip


2、打开终端切换至root权限

1
$ sudo -i

回车后需要输入本机用户密码(就是电脑登陆密码)。输入时不会有视觉反馈(不会显示出星号)。


3、进入GYP项目目录进行setup

1
$ ./setup.py install


二、部署libpomelo

1、下载libpomelo项目

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

也可以直接下载:libpomelo-master.zip


2、生成libpomelo的Xcode项目

编译Mac端

1
2
$ ./pomelo_gyp 
$ xcodebuild -project pomelo.xcodeproj

编译iOS端

1
2
$ ./pomelo_gyp -DTO=ios
$ ./build_ios

编译iOS模拟器端

1
2
$ ./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所处的目录结构如下

1411542470563570.png

通过如下命令可以将图片中蓝色选中的两个文件合并打包到新的路径下。

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

静态库文件打包后的效果如下图:

1411542495832454.png


5、对libpomelo删繁就简

在项目中新建一个lib文件夹,将合成的静态库文件统一放进去。对于项目的其他部分,只需保留如下的几个文件夹文件:

  • libpomelo->include

  • libpomelo->deps->jansson->src

  • libpomelo->deps->uv->include

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

1411542536706752.png

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

1、创建一个Cocos2d-x项目

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


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

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

1411542642273586.png

3、添加静态库文件

点击项目的Target,选择Build Phases选项卡,找到Link Binary With Libraries,

1411542667933268.png

点击+,点击Add Other…,

1411542698663254.png

将导入的libpomelo项目中三个静态文件添加进去。

1411542721722920.png

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

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

2)安装依赖项

1
$ sh npm-install.sh

3)运行game-server

在终端进入chatofpomelo-websocket项目下的game-server文件夹。执行:

1
$ node app


2、运行客户端

1)添加头文件

在HelloWorldScene.cpp文件中添加头文件

1
#include "pomelo.h"


2)添加测试代码

在init()函数中添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*向服务器请求连接*/
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静态库,并在Cocos2d-x项目中引用(讲解十分详细,图文丰富)

2、libpomelo官方README文档(有较大参考价值)

3、pomelo客户端开发(同样属于官方文档,是链接2的中文版)

4、Mac下Cocos2d-x连接pomelo服务器(写得比较简洁,把必要的部分都写进去了)

5、迁移到Mac(如果有些意外情况可尝试参考,该文价值量较低)

6、手把手教你把pomelo客户端组件libpomelo加入Cocos2d-x 3.0项目(Windows、Android、iOS平台)(官方文档,添加组件的另一种方式,相对比较繁琐)


来源网址:http://www.cnblogs.com/tangyikejun/p/3988724.html

方法二:http://www.cnblogs.com/yangxq/p/3791682.html

   最近在学习cocos2dx的过程中需要和服务器进行交互,所以这几天在学习libpomelo静态库的编译和使用。之前在windows系统下编译libpomelo,并在VS中引入比较顺利;但是,目前对Mac系统和XCode不是很熟悉,所以多花了些时间。不过,最终还是成功了,在这里就将我编译引入libpomelo静态库的过程记录下来,也分享给和我一样遇到问题的朋友们。

 

准备工作

      libpomelo下载地址:https://github.com/NetEase/libpomelo或者http://pan.baidu.com/s/1B2o8Y,下载解压后目录结构为

      此时,我们需要通过gyp来生成工程文件并进行编译,从官网下载gyp速度非常慢,这是我从其他地方下载到的,分享给大家http://pan.baidu.com/s/1hqmn3N2,不能保证是最新版的,下载解压后得到

      下面开始安装gyp,大家看到setup.py应该知道这个python文件应该和安装有关,使用help命令查看相关信息,发现build和install命令可用于编译和安装

      下面进行编译

      安装时,由于存在权限问题,所以需要加上sudo命令来提升权限,同时需要输入密码

      gyp安装成功后,我们的准备工作就做好了。

 

编译静态库

      在终端使用如下命令:    

  ./pomelo_gyp -DTO=ios
  ./build_ios
  ./build_iossim

 

      首先,进入刚刚下载的libpomelo目录,然后开始编译ios设备静态库

      编译静态库成功!

 

      接下来开始编译ios虚拟机的静态库

      这里出现了错误,是因为我的xcode中没有安装IOS6.1的虚拟机。点击xcode下的Preferences菜单项,切换到Downloads选项卡,如下,安装虚拟机

      这里我没有等待安装完成,直接切换到另一个已安装虚拟机的系统下,后面的“√”表示已安装

      现在重新编译,编译成功

      现在我们可以查看编译生成的静态库文件

      libpomelo->build下:

      libpomelo->deps->jansson->build下:

      libpomelo->deps->uv->build下:

      此时,静态库文件已经成功编译,共有6个.a文件。

 

打包静态库文件

      在终端使用如下命令:

  lipo -create 文件1 文件2 -output 新文件

 

      我们可以把ios设备(arm)和ios虚拟机(i386)的静态库用lipo命令打包在一起,方便我们使用。

      输入上述命令后,在libpomelo目录下会生成3个打包后的.a文件

      此时,我们就可以在项目中使用这3个静态库了。

 

      接下来,将需要的静态库及相关头文件提取出来。将libpomelo->include文件夹、libpomelo->deps->jansson->src文件夹、libpomelo->deps->uv->include文件夹下的文件保留,另外将3个.a文件放于新建的目录lib中,最终的目录结构如下

 

cocos2dx项目引入静态库

      将上面包含静态库和头文件的目录加入项目中,在XCode中右击项目,“Add Files to XXX”,选择上面的目录,然后添加

      此时在我们的项目中可以看到刚刚添加的目录

      然后,点击项目的Target,选择“Build  Phases”选项卡,找到“Link Binary With Libraries”

      点击“+”,点击“Add Other…”,选择3个静态库,点击Open按钮

      此时,静态库已加入到项目中

      现在,我们切换到“Build Settings”选项卡,找到“Search Paths”,在“Header Search Paths”和“Library Search Paths”中分别加入3项,分别是libpomelo中的include,deps->jansson->src和deps->uv->include的物理路径。

      然后,关闭XCode,重新打开项目,编译。此时在”jansson.h”中会报错

      我们将此处的尖括号改为引号,“hashtable.c”也做同样处理,再次编译,编译成功。

 

      现在我们就可以在项目中使用libpomelo库提供的服务了。

      首先,我们在AppDelegate.cpp中引入头文件#include “pomelo.h”,然后编译,此时在”map.h”中又有错误

      将其改为#include “ngx-queue.h”就可以了,再次编译,编译成功!

 

      这些头文件引用的问题相信大家都能搞定(可能你遇到的问题和我不一样,但应该都是小问题)。

 

连接pomelo服务器

      我们在程序中加入如下代码:

      编译成功后,运行程序,控制台输出如下,此时由于没有服务器,所以连接失败。

 

      接下来,在VM虚拟机中打开pomelo服务器,将其激活。然后我们在MAC下的浏览器中输入ip和端口,查看服务器状态处于激活状态(我用的服务器代码在这里https://github.com/NetEase/chatofpomelo-websocket,当然代码中的ip和端口需要自己修改)

 

      再次运行我们的程序,控制台输出如下

 

      至此,我们已经成功编译了libpomelo静态库,将其引入项目,并测试连接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提示的方法却发生了各种问题。作为一个开源产品只有自己会用其他人都无法编译安装,怎么能扩大推广呢,真尼玛坑爹啊。

首先,官方提示前提要安装GYP。GYP是个啥啊?干嘛用的?去哪下载?如何安装?

先从GYP链接的地址把GYP下载下来

[plain]  view plain copy
  1. svn checkout http://gyp.googlecode.com/svn/trunk/ gyp-read-only  

进入 gyp-read-only目录,但是还是不知道如何安装,如是看到有setup的文件通过./setup.py --help查看帮助信息,得知./setup.py build可以编译,然后执行./setup.py install编可以安装。但是执行./setup.py install时会提示error: /usr/local/bin/gyp: Operation not permitted,是由于当前用户权限的问题,所以需要重新执行sudo ./setup.py install方可成功。

下面开始正式编译libpomelo库,首先执行git clone https://github.com/NetEase/libpomelo.git命令下载源代码.(如果git命令在Mac系统中是内置的,如果在windows环境下需要安装)。执行cd libpomelo命令进入下载的源代码目录,根据官方的指南编译ios环境下的库./pomelo_gyp -DTO=ios,但是会显示错误信息:python: can't open file '/usr/local/bin/gyp_main.py': [Errno 2] No such file or directory,这明显是安装GYP过程中gyp_main.py文件没有安装成功。所以根据网上的一些解决办法,我将GYP目录拷贝到libpomelo目录下,然后执行./gyp-read-only/gyp --depth=. pomelo.gyp -Dlibrary=static_library -DTO=ios,终于构建成功,其实这条指令就是pomelo_gyp中的内容,只不过由于目录层次的问题,我单独在外面直接执行罢了。

下面开始按照指南的说明执行./build_iossim编译静态库时发现报错,没有找到指定的sdk6.1,于是在网上各种百度各种谷歌,就是没有发现解决方法,唯一有过相似遭遇的解决方法是拿到其他XCode5的机器上编译,这种解决方法不彻底也不科学。于是用pico build_iossim命令打开编译配置文件看看到底是什么原因。原来编译参数-sdk iphonesimulator6.1指定的版本在我的开发环境中过高,我本地使用sdk只有5.0,所以将该文件中的6.1全部改为5.0再执行Ctrl+X退出编译状态,再执行./build_iossim命令便可编译成功。

很难想象网易这样的一个产品说明竟然做得这么简单,除了参与开发的人员能够熟练构建开发环境诊断一些问题,像我们一些刚刚接触入门的开发者来说很难入手。

建议网易完善一下环境构建手册和开发手册,文档不是写给自己看的,是写给没有接触这些产品的开发者阅读的,所以要设身处地从入门者的角度出发,甚至可以把读者设想为0基础的开发者,step-by-step地指导开发,这样才能更好地推广这套产品。

后面抽时间把libpomelo添加到cocos2d-x的项目工程中,尝试调通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静态库,并在Cocos2d-x项目中引用(讲解十分详细,图文丰富)

2、libpomelo官方README文档(有较大参考价值)

3、pomelo客户端开发(同样属于官方文档,是链接2的中文版)

4、Mac下Cocos2d-x连接pomelo服务器(写得比较简洁,把必要的部分都写进去了)

5、迁移到Mac(如果有些意外情况可尝试参考,该文价值量较低)

6、手把手教你把pomelo客户端组件libpomelo加入Cocos2d-x 3.0项目(Windows、Android、iOS平台)(官方文档,添加组件的另一种方式,相对比较繁琐)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值