Ⅰ 如何移植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库。