libpoco在mac平台编译详解

来源:互联网 发布:红叶知弦 编辑:程序博客网 时间:2024/04/30 04:10

    libpoco是一个类似wxwidgets的极其强大的基础类库,其核心poco::net封装了大部分网络操作,poco::data封装了sqlite、mysql及odbc,甚至在里面还发现autoptr,嘎嘎,这可是好东西啊。还有些其他零零碎碎的功能,大家可以去慢慢摸索,最关键他是一个开源跨平台的类库。可以很方便的集成到cocos2d-x或unity3d这种跨平台手机开发框架中。这就是俺们寻找多时的,以下以macosx mountain-lion集成poco到cocos2d-x中为例:

    1. 首先需要一个gmake,进入终端键入make --version,如果有版本信息则跳过该步骤,否则往下看。mac平台工作的童鞋门xcode是必不可少的,没有安装的可以到appstore免费安装一个。进入xcode,选择xcode->preferences->download,选择安装command line tools,xcode自动会安装命令行模式gmake。

    2. 下载libpoco-all,解压后通过命令行进入poco根目录。输入以下命令编译静态库

sudo ./configure --config=iPhone --no-tests --no-samples --omit=Data/ODBC,Data/MySQL
sudo make IPHONE_SDK_VERSION_MIN=3.0 POCO_TARGET_OSARCH=armv6 -s -j4 
sudo make IPHONE_SDK_VERSION_MIN=3.2 POCO_TARGET_OSARCH=armv7 -s -j4 

sudo ./configure --config=iPhoneSimulator --no-tests --no-samples --omit=Data/ODBC,Data/MySQL
sudo make -s -j4

特别注意

1)如果编译不过,一般是找不到IphoneSDK路径,可打开Build/Config/Iphone,修改路径
TOOL_PREFIX  ?= /Applications/Xcode.app/Contents/Developer/Platforms/$(IPHONE_SDK).platform/Developer/usr/bin

  2)如果嵌入工程编译出现i386错误,就需要编译i386平台静态库(针对模拟器)

sudo ./configure --config=iPhoneSimulator --no-tests --no-samples --omit=Data/ODBC,Data/MySQL
sudo POCO_TARGET_OSARCH=i386 make -s -j4

3)请将BuildSetting的c++ standard library项修改成libstdc++(GNU C++ standard library),否则会出现编译错误


  3. 合并编译出的各平台静态库,如果单独编译了i386架构,需要把i386下静态库一起合并。

mkdir lib/iPhoneOS/universal

sudo lipo -create lib/iPhoneOS/armv6/libPocoFoundation.a lib/iPhoneOS/armv7/libPocoFoundation.a lib/iPhoneSimulator/i686/libPocoFoundation.a -output lib/iPhoneOS/universal/libPocoFoundation.a
sudo lipo -create lib/iPhoneOS/armv6/libPocoNet.a lib/iPhoneOS/armv7/libPocoNet.a lib/iPhoneSimulator/i686/libPocoNet.a -output lib/iPhoneOS/universal/libPocoNet.a
sudo lipo -create lib/iPhoneOS/armv6/libPocoUtil.a lib/iPhoneOS/armv7/libPocoUtil.a lib/iPhoneSimulator/i686/libPocoUtil.a -output lib/iPhoneOS/universal/libPocoUtil.a
sudo lipo -create lib/iPhoneOS/armv6/libPocoXML.a lib/iPhoneOS/armv7/libPocoXML.a lib/iPhoneSimulator/i686/libPocoXML.a -output lib/iPhoneOS/universal/libPocoXML.a
sudo lipo -create lib/iPhoneOS/armv6/libPocoData.a lib/iPhoneOS/armv7/libPocoData.a lib/iPhoneSimulator/i686/libPocoData.a -output lib/iPhoneOS/universal/libPocoData.a

  4. 执行 sudo make install ,并将合并的.a覆盖到/usr/local/lib

  5. 下面测试读取sqlite,将下述代码加入工程,如果编译通过,说明成功了。

// Poco::Data例子
#include "Poco/Data/Common.h"
#include "Poco/Data/SQLite/Connector.h"
#include <iostream>

// connect sqlite
Poco::Data::SQLite::Connector::registerConnector();
    Poco::Data::Session ses("SQLite","./sqlite.db"); // 自己定义路径
int count = 0;
ses << "SELECT COUNT(*) FROM test" ,Poco::Data::into(count) ,Poco::Data::now;
std::cout << "People in DB " << count;


0 0
原创粉丝点击