libpoco在mac平臺編譯詳解

    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;


發佈了25 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章