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;