Mac上用于Cocos2dx的Poco静态库编译(支持Android和IOS)
来源:互联网 发布:手机吹笛子软件 编辑:程序博客网 时间:2024/06/16 09:47
前言:
最近参与一个Cocos2dx游戏开发项目,利用Cocos2dx的跨平台特性,一次开发同时支持Android和IOS两大移动平台。项目中用到了Poco这个优秀的C++库,IOS开发中可以直接使用Poco静态库进行编译,而Android的Cocos2dx是编译成动态库再与JNI进行交互,在使用上两者还是有一些区别,自己走了些弯路,所以记录下来供后来者参考^-^。
一、准备工作
1.1 下载Poco库
Poco官网:http://pocoproject.org/
Poco github链接:https://github.com/pocoproject/poco
注意:Poco库建议大家用github上的最新版本,或者去官网下载1.5.x版本,不要使用官网的1.4.6p1“稳定版”,这个版本折腾我很长时间,发现竟然缺失了Poco::JSON模块
解压或者Clone到某个目录下,例如 ~/poco
cd ~/poco
./configure
make
sudo make install
这个步骤是将Poco库安装到本机Mac环境,其主要目的是将Poco库的头文件安装到/user/local/include/Poco,至于为什么这么做,后面会有解释。
1.2 开发环境搭建(Mac)
Cocos2dx的Android开发环境搭建:参考http://young40.github.io/blog/2013/02/23/setting-up-android-development-envirment-on-mac-os-x/
Cocos2dx的IOS开发环境搭建:这个太简单了,google搜索一下
以上环境一定要搭建好再往下看,下面是我机器上的一些软件安装路径(版本信息也可以体现):
/opt/cocos2d-x-2.1.4
/opt/adt-bundle-mac-x86_64-20130219
/opt/android-ndk-r8e
我使用的Poco库是从github上Clone到 ~ 目录
二、IOS平台的Poco静态库编译
2.1 用于IOS平台的Poco通用静态库编译
终端命令行下
cd ~/poco
./configure --config=iPhone --no-tests --no-samples --omit=...
make POCO_TARGET_OSARCH=armv7 -s -j4 //支持armv7
make POCO_TARGET_OSARCH=armv7s -s -j4 //支持armv7s
(注:不指定POCO_TARGET_OSARCH的话默认编译armv6版本,armv6是iphone 3GS之前的CPU架构,现在似乎没有支持的必要喽)
这里就已经编译好真机的静态库,我们还要支持模拟器调试,所以再编译一个模拟器版本
./configure -config=iPhoneSimulator --no-tests --no-samples --omit=...
make -s -j4
好了,到此我们的静态库已经编译完成,在当前的目录下会多了3个文件夹./lib/iPhoneOS/armv7/、./lib/iPhoneOS/armv7s/以及./lib/iPhoneSimulator/i686/。每个文件夹下面会有8个静态库文件,分别是Poco的Foundation、JSON、XML、Net四个模块的Release和Debug版本。
最后,我们需要集成一个通用静态库,这样在开发中即可以使用模拟器也可以用真机进行调试。先建立一个文件夹存放通用静态库:
mkdir ./lib/poco-ios-universal
使用lipo工具合并静态库,已Foundation模块为例:
lipo create ./lib/iPhoneOS/armv7/libPocoFoundation.a ./lib/iPhoneOS/armv7s/libPocoFoundation.a ./lib/iPhoneSimulator/i686/libPocoFoundation.a -output ./lib/poco-ios-universal/libPocoFoundation.a
2.2 在Cocos2dx项目中使用Poco静态库
iPhone系统软件的流畅与它的开发语言有很大关系,在IOS开发中使用C++的Poco静态库毫无压力,将上一步编译的静态库拖入
在工程的编译选项User Header Search Paths里加上"/usr/local/include",这样就可以找到Poco头文件了。之前让把Poco的头文件安装到/usr/local/include目录下,一来是为了iOS和Android开发环境可以共用,二来是因为我发现把Poco头文件文件夹放在工程中会有冲突。
至此,你就可以在开发中使用Poco库啦!
三、Android平台的Poco静态库编译
3.1 poco静态库编译
cd ~/poco
./configure --config=Android --no-tests --no-samples --omit=...
make -s -j4 ANDROID_ABI=armeabi-v7a
在编译过程中如果遇到Error.cpp第80行发生错误,可以编辑./Foundation/src/Error.cpp,将第80行:
return std::string(strerror_r(errorCode, errmsg, 256));
换成:
strerror_r(errorCode, errmsg, 256);
return std::string(errmsg);
就可以编译通过了,但这是我自己修改的,不保证不出问题哦。不出意外的话,在文件夹./lib/Android/armeabi-v7a/下也会出现8个静态库文件。
和IOS平台不同,Android平台只需要编译这一个版本的静态库,而没有真机和模拟器的区分,所以创建静态库的步骤就免啦。
3.2 在Android的Cocos2dx项目中使用Poco静态库
cocos2dx是将用户开发的C++部分用NDK编译成动态库libgame.so,再通过Android的JNI机制进行交互,从而一次开发可以同时支持多平台。
假设你已经创建了好了Android平台的Cocos2dx工程,例如 poco-android
编辑poco-android/proj.android/jni/Android.mk文件
在include $(CLEART_VARS)后面添加
include $(CLEAR_VARS)
LOCAL_MODULE := pocofoundation_static //名字你可以自己起,下面会用到,保持一致就可以
LOCAL_SRC_FILES := ../../Classes/libPocoFoundation.a //之前编译的Andorid版静态库文件存放路径,可以换成你自己的
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := poconet_static
LOCAL_SRC_FILES := ../../Classes/libPocoNet.a
LOCAL_STATIC_LIBRARIES := pocofoundation_static //Poco的Net等其它库依赖Foundation库,所以这些库要写在Foundation之后
include $(PREBUILT_STATIC_LIBRARY)
.....
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes $(LOCAL_PATH)/ /usr/local/include //
LOCAL_STATIC_LIBRARIES := pocofoundation_static poconet_static //这里的名称要与上面设置的一致
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static
.....
这时候执行build_native.sh,不出意外的话就编译成功了。
- Mac上用于Cocos2dx的Poco静态库编译(支持Android和IOS)
- 在Mac OSX下编译用于iOS的FreeType静态库
- POCO静态库和动态库编译-MacOSX
- Poco C++ ios 和 android平台编译脚本
- mac电脑上编译能在ios上用的 ffmpeg 静态库 (成功经验)有疑问可以留言
- 关于cocos2dx游戏的Android和IOS编译问题
- 编译ios平台的支持arm64和x86_64的通用openssl静态库
- Cocos2dx v3.9 Mac OS 编译运行Android工程和ios工程
- Mac 上面编译POCO C++库
- POCO C++ MAC 编译
- ios ffmpeg编译支持命令行的静态库文件
- cocos2dx含有Box2d编译到android平台和ios平台上
- mac系统编译 ffmpeg ios 静态库
- POCO C++ 在IOS上的使用
- 为Android平台编译支持OpenCL的Opencv静态库
- 编译iOS上可用的sqlite3静态库
- ios上关于编译MP4v2静态库的问题
- cocos2dx 在mac下开发ios和android游戏
- 九度OJ1509:树中两个结点的最低公共祖先
- Ubuntu12.04 在安装JDK的时候出现问题时解决方法
- jQuery-easyui将validatebox提示信息改为中文
- 对比synchronized与java.util.concurrent.locks.Lock 的异同
- Hadoop集群(第2期)_机器信息分布表
- Mac上用于Cocos2dx的Poco静态库编译(支持Android和IOS)
- YII框架学习 第三天(2) Model view 整合
- 多寄存器寻址指令ldmia/ldmib和ARM存储器访问指令——多寄存器存取
- 图像处理特征不变算子系列篇----开篇
- 计算字符串相似度()
- 03,标准C
- Hadoop集群(第3期)_VSFTP安装配置
- 关于C语言的整型数据的溢出
- 禁用Cookie的浏览器使用session