Ⅰ 如何移植boost庫到Android
這里是使用NDK進行編譯boost的但肯定對我有用吧。。經過一番折騰終於編譯成功,,高興,呵呵! 轉載
下面將主要的過程記錄下來:
1、下載boost 源碼:
Boost for Android
Boost for android is a set of tools to compile the main part of the Boost C++ Libraries for the Android platform.
Currently supported boost versions are 1.45.0, 1.48.0 and 1.49.0.
因此下載最新的 1.49 版本,下載完成後進行打補丁
2、下載補丁代碼
boost-1_49_0
3、打補丁代碼
boost_1_49_0.tar.bz2 放在android的 external 下解壓:
tar -xjvf external/boost_1_49_0.tar.bz2
將boost-1_49_0.patch放在external\boost_1_49_0下面根目錄執行:
patch -Np1 -d external/boost_1_49_0 < external/boost_1_49_0/boost-1_49_0.patch
4、編寫boost的makefile文件,即Android.mk
LOCAL_PATH:= $(call my-dir)
common_SRC_FILES := \
libs/thread/src/pthread/thread.cpp \
libs/thread/src/pthread/once.cpp \
common_SRC_FILES += \
libs/filesystem/v3/src/codecvt_error_category.cpp \
libs/filesystem/v3/src/operations.cpp \
libs/filesystem/v3/src/path.cpp \
libs/filesystem/v3/src/path_traits.cpp \
libs/filesystem/v3/src/portability.cpp \
libs/filesystem/v3/src/utf8_codecvt_facet.cpp \
libs/system/src/error_code.cpp \
libs/system/src/local_free_on_destruction \
include $(CLEAR_VARS)
LOCAL_MODULE:= libboost
LOCAL_SRC_FILES := $(common_SRC_FILES)
prebuilt_stdcxx_PATH := prebuilts/ndk/current/sources/cxx-stl/gnu-libstdc++
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/boost \
$(prebuilt_stdcxx_PATH)/include \
$(prebuilt_stdcxx_PATH)/libs/$(TARGET_CPU_ABI)/include/ \
LOCAL_C_INCLUDES += \
$(prebuilt_stdcxx_PATH)/include \
$(prebuilt_stdcxx_PATH)/libs/$(TARGET_CPU_ABI)/include/ \
$(prebuilt_supccxx_PATH)/include
LOCAL_CFLAGS += -fvisibility=hidden -lpthread
LOCAL_CPPFLAGS += -fexceptions -frtti
LOCAL_SHARED_LIBRARIES := libc libstdc++ libstlport
LOCAL_LDFLAGS += -L$(prebuilt_stdcxx_PATH)/libs/$(TARGET_CPU_ABI) -lgnustl_static -lsupc++
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)
比較重要的是上面 紅色 部分文字
最後編譯生成:
target thumb C++: libboost <= external/boost_1_49_0/libs/thread/src/pthread/thread.cpp
target thumb C++: libboost <= external/boost_1_49_0/libs/thread/src/pthread/once.cpp
target thumb C++: libboost <= external/boost_1_49_0/libs/filesystem/v3/src/codecvt_error_category.cpp
target thumb C++: libboost <= external/boost_1_49_0/libs/filesystem/v3/src/operations.cpp
target thumb C++: libboost <= external/boost_1_49_0/libs/filesystem/v3/src/path.cpp
target thumb C++: libboost <= external/boost_1_49_0/libs/filesystem/v3/src/path_traits.cpp
target thumb C++: libboost <= external/boost_1_49_0/libs/filesystem/v3/src/portability.cpp
target thumb C++: libboost <= external/boost_1_49_0/libs/filesystem/v3/src/utf8_codecvt_facet.cpp
target thumb C++: libboost <= external/boost_1_49_0/libs/system/src/error_code.cpp
target SharedLib: libboost (out/target/proct/godbox/obj/SHARED_LIBRARIES/libboost_intermediates/LINKED/libboost.so)
target Symbolic: libboost (out/target/proct/godbox/symbols/system/lib/libboost.so)
target Strip: libboost (out/target/proct/godbox/obj/lib/libboost.so)
Install: out/target/proct/godbox/system/lib/libboost.so
成功生成 libboost.so 庫
Ⅱ 如何編譯&使用boost庫
1. 編譯
1.2. VS2005編譯boost_1_55_0
1.2.1. 使用vs2005的命令行執行:...\boost_1_55_0\bootstrap.bat
1.2.2. 編譯動態庫
bjam install stage --toolset=msvc-8.0 --stagedir="C:\Boost\boost_vc_80" link=shared runtime-link=shared threading=multi debug release
1.2.3. 編譯靜態庫
bjam install stage --toolset=msvc-8.0 --stagedir="D:\Boost\boost_vc_80" link=static runtime-link=static threading=multi debug release
各種參數詳解:
stage:表示只生成庫(dll和lib)
install:還會生出包含的頭文件
--toolset=msvc-8.0:指定編譯器版本,8.0為vs2005,其他VS類推。
--stagedir:指定編譯後存放的目錄
link:生成動態庫/靜態庫。動態庫(shared),靜態庫(static)
runtime-link:動態/靜態C/C++運行時庫,同樣有shared和static兩種組合方式。這樣共有4種組合方式,個人根據自己需要選擇。
threading:單/多線程,一般都是多線程程序,當然multi了。
debug/release:編譯版本,一般2個都需要。
2. 使用
使用靜態庫:
[cpp] view plain print?
//#define BOOST_ALL_DYN_LINK
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition.hpp>
使用靜態庫連接時,僅需要包含的lib為:
debug版:libboost_system-vc80-mt-gd-1_55.lib等一系列包含gd的庫。
release版本:libboost_system-vc80-mt-1_55.lib等一系列不包含gd的庫。
使用動態庫鏈接:
[cpp] view plain print?
#define BOOST_ALL_DYN_LINK
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition.hpp>
使用動態庫鏈接時,僅需要包含的lib為:
debug版:boost_system-vc80-mt-gd-1_55.lib,同時在生成的exe加入boost_system-vc80-mt-gd-1_55.dll
release版:boost_system-vc80-mt-1_55.lib,同時在生產的exe路徑下加入boost_system-vc80-mt-1_55.dll
Ⅲ 如何在項目中使用boost靜態庫
當你編譯完boost庫後,靜態庫是放在庫的stage/lib目錄下。
要使用的話,就在bashrc裡面加上BOOST_ROOT=xxx/boost_1_51_0,Boost_LIBRARYDIR=${BOOST_ROOT}/stage/lib。
編譯程序的時候要指定boost的頭文件和庫的路徑,如;
g++ demo.cpp -I$BOOST_ROOT -L$Boost_LIBRARYDIR -lboostxxx -o demo
Ⅳ 如何配置boost庫
要做網頁內容提取工作,自然少不了長字元串匹配、搜索的問題,最先想到的是使用正則表達式,簡單、高效。處於正則表達式perl其實是當之無愧的老大,但是為了開發上的統一,暫時全部使用標准c++實現,因而還需要附加庫來實現.thank solsikja for sharing and favor..
google一下,發現支持正則的庫還真不少,大概有以下幾種:boost,GNU,VC7帶的ATL中的和微軟發布的greta。
網上的朋友對boost評價不錯,決定就使用是它了!
1、接下來的就是下載boost庫,網上很好找。我下載的是壓縮包,20多M,解壓後將近100多M。
解壓目錄是D:\boost
2、然後是編譯,我只要支持正則表達式就可以,因此只需要編譯D:\boost\libs\regex\build目錄下的文件。據說全部編譯要花將近2個小時,沒有驗證過,編譯正則表達式部分在實驗室機器上(2.20G,512M)只用了不到5分鍾。不過可憐俺的本都給跑死了,太熱了,自動關機啦.郁悶.如此之菜還敢用本寫程序的,普天之下也就是俺這一個大傻帽啦....
網上介紹的如何編譯最多的一篇文章是「VC利用boost庫解析正則表達式」,如果有人能根據這篇文章編譯成功不妨告訴喃一聲……
以下是我的操作:
在「運行」里輸入「cmd」,打開命令提示符;
輸入命令「cd D:\boost\libs\regex\build」//設置當前目錄
接下來是很關鍵的一步:
很多文章是這樣說的「輸入 nmake -fvc6.mak」
但是出現了「'nmake' 不是內部或外部命令,也不是可運行的程序或批處理文件。」的錯誤提示。
然後你就會拚命查找原因,結果又有文章上說是環境變數沒配置好,然後給出一堆「set」。
也有的文章說是運行一下visual studio安裝目錄下的VC98\Bin\VCVARS32.BAT文件就OK了。
你按照文章作者的方法做的,結果發現問題依舊!
以上說法都是正確的,但是說得都不是很完整,出現錯誤提示的根本原因就是環境變數沒配置好,不識別nmake命令,配置過jdk的朋友就很容易明白。如果按照作者的要求搞一堆「set」,未免大題小作了吧,因為我們只需要用一次'nmake' 就可以解決問題了。
VCVARS32.BAT正式配置環境變數的批處理文件,但是配置的參數只在當前窗口有效,也就是說當你雙擊運行後窗口關閉,環境變數已經沒有了。
於是我用了以下方法:
把VCVARS32.BAT文件用滑鼠拖到打開的cmd窗口("D:\Program Files\Microsoft Visual Studio\VC98\Bin\VCV
ARS32.BAT"),然後回車。
輸入命令「nmake -fvc6.mak」
等待幾分鍾,OK了!,D:\boost\libs\regex\build多了一個vc6的文件夾,裡面是很多lib和dll文件。
3、到此資源已經准備好了,下面要做的工作是配置VC6.0,使它編譯使時候能找到正則庫。
把vc6下的所有lib和dll文件拷貝到Visual Studio安裝目錄下的VC98\boostRex(boostRex是我自己建的)
然後打開vc6.0,選擇「Tools->Options->Directories->Include files」,加入一行「D:\BOOST」
選擇「Tools->Options->Directories->Library file」,加入一行「C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\BOOSTREX」(彩色部分是我的Visual Studio安裝目錄)
配置也OK了!
4、編寫程序測試
SDK下的測試:
#include "stdafx.h"
#include
#include
#include
#include
#include
using namespace std;
using namespace boost;
regex expression_r("^select ([a-zA-Z]*) from ([a-zA-Z]*)");
int main(int argc, char* argv[])
{
std::string in;
cmatch what;
cout << "enter test string" << endl;
getline(cin,in);
if(regex_match(in.c_str(), what, expression))
{
for(int i=0;i
cout<<"str :"<.str()<
}
else
{
cout<<"Error Input"<
}
return 0;
}
輸入: select name from table
輸出: str:select name from table
str:name
str:table
注意:如果出現 LINK : fatal error LNK1104: 無法打開文件「libboost_regex-vc6-sgd-1_34_1.lib」如果出現這種情況就把這個文件名改一下,因為boost編譯之後得到的是libboost_regex-vc6-sgd-1_34,實際我們下載的是boost1.34.1,所以文件名就要對應起來最後改為libboost_regex-vc6-sgd-1_34_1,這樣就正確了。開始也沒想到應該這樣改,只是跟小子隨便試了一下,竟然成功了。gxgx!!!!
Ⅳ ubuntu 使用boost庫,怎麼鏈接
經過重重困難,終於配置好了各種環境,. 網上說的配置boost的方法略不靠譜, 東湊西湊, 加上官網說明文檔,才摸索出來.
分享一下心得給跟我一樣的菜鳥們, 不要路太彎.
(1) 首先, 官網下載boost壓縮包: 假設為 boost_1_61_0.tar.bz2
(2) 解壓到出來, 進入壓縮包所在的目錄:
[html] view plain
tar -zxvf boost_1_61_0.tar.bz2
(3) 進入boost_1_61_0目錄, 裡面有一個 bootstrap.sh, 執行命令
[html] view plain
sudo ./bootstrap.sh
你也可以添加prefix參數, 自定義生成的頭文件和二進制庫文件目錄,如:
[html] view plain
sudo ./booststrap.sh --prefix /usr/local/lib/boost
則生成的頭文件在/usr/local/lib/boost/include中, 二進制庫文件在/usr/local/lib/boost/lib中
但是不建議自己定義目錄, 不然後面用的時候還得指定庫目錄, 麻煩
sudo ./boostrap.sh 默認頭文件在/usr/local/include中; 二進制庫文件在/usr/local/lib中.
執行命令:
[html] view plain
sudo ./b2 install
等吧, 等它執行完畢, 去看看上面說的目錄裡面是不是有boost的東西. 如查看/usr/local/include/boost中有沒有boost相關頭文件
(4) 在eclipse c++中使用它
如果沒安裝eclipse,可以參看
新建項目- C++項目 , 選擇 Linux GCC的空項目
點擊finish
默認情況下, 項目已經自動包含了/usr/local/include庫路徑
新建src文件夾,然後在裡面新建main.cpp
這時,咱們調用boost::bind等部分函數已經是可以用的.編譯和運行都沒有問題. 我以為大功告成了, 其實並沒有
Ⅵ 怎樣使用Boost庫
boost自帶生成工具bjam,先編譯bjam,然後用bjam "-sTOOLS=gcc " install 命令
Ⅶ 如何使用已經編譯好的boost庫
vc的話有編譯好的,mingw的話也有,不過不是最新版的,自己編譯找教程吧,大概是先編譯一個bjam的文件出來,然後用它編譯boost,挺快的,其實沒有某些教程說的幾個小時,我的i5-460M大概是編譯了大半個小時,boost1.56
Ⅷ boost的靜態庫怎麼使用
當編譯完boost庫後,靜態庫是放在庫的stage/lib目錄下。
要使用的話,就在bashrc裡面加上BOOST_ROOT=xxx/boost_1_51_0,Boost_LIBRARYDIR=${BOOST_ROOT}/stage/lib。
編譯程序的時候要指定boost的頭文件和庫的路徑,如;
g++ demo.cpp -I$BOOST_ROOT -L$Boost_LIBRARYDIR -lboostxxx -o demo
Ⅸ 如何調用boost庫
首先把Boost庫的頭文件存放到/usr/include/boost/路徑下,再把Lib文件存放到/usr/local/lib/boost/路徑下。修改/etc/profile文件,在此文件中增加如下2個環境變數:
BOOST_INCLUDE=/usr/include/boost
export BOOST_INCLUDE
BOOST_LIB=/usr/local/lib/boost
export BOOST_LIB
寫一個如下所示的cpp文件。
//samlpe.cpp
#include <iostream>
#include <string>
#include <boost/thread.hpp>
using namespace std;
void threadRoutine(void)
{
boost::xtime time;
time.nsec = 0;
time.sec = 20;
cout << "線程函數做一些事情" << endl;
boost::thread::sleep(time);
}
int main(void)
{
string str;
cout << "輸入任意字元開始創建一個線程..." << endl;
cin >> str;
boost::thread t(&threadRoutine);
t.join();
cout << "輸入任意字元結束運行..." << endl;
cin >> str;
return 0;
}
保存。使用g++編譯,命令如下所示:
g++ -o samlpe.out samlpe.cpp -I$BOOST_INCLUDE -L$BOOST_LIB -lboost_thread-gcc-mt
其中-I參數指定Boost頭文件路徑,-L參數指定Boost庫文件路徑,-l參數指定使用線程庫名。在我使用的這個版本Boost里,到/usr/local/lib/boost路徑下,可以看到有關Boost線程庫文件,比如:libboost_thread-gcc-mt.a等。注意在用-l參數指定庫名時把磁碟文件名前面那個lib前綴去掉就可以了。
Ⅹ 如何學習boost庫
BOOST是對STL的擴充,它加入了的智能指針,圖操作等等很多的模塊。
2.這兩個庫都是在C++標准委員會的指導下制定的。STL包含了常用的演算法和集合類型,並採用了泛型的思想來實現。boost是對STL的擴充,是一個功能更加強大,更實用的庫。所以作為初學者,還是先掌握STL好,需要寫應用性程序時,再研究boost庫。