boost全平台编译方法

0.通用规则

boost自带一套编译工具bjam,bjam本身是跨平台的,并且也要自行编译出来。在boost目录下有bootstrap.sh和bootstrap.bat两个脚本分别用来编译*nix和windows下的bjam。bootstrap脚本可以传入参数,以在编译bjam过程中生成特定的编译boost的配置。编译bjam过程中生成的project-config.jam就是默认的配置,但还可以在运行bjam的时候再传入参数来覆盖。同时生成的b2是bjam的代理,运行哪个的效果差不多。

在终端下运行

bjam --show-libraries

会列出所有要编译的库。

真正编译时,可以传入–with-xxx来选择编译哪些库,或者传入–without-xxx来选择不编译哪些库。如果不传则会读取project-config.jam的设置,如果也没有则是编译全部的库。

更多的参数可以用

bjam --help

来查看。

注意:

旧版本的boost可能会存在编译问题,尽量用新的就好。bjam在*nix和windows支持的参数有不同。


1. iOS平台编译

环境:

OS X Yosemite 10.10.3

Xcode 6.3.1(6D1002)

boost 1.57

步骤:

把下面的脚本保存成build_boost.sh,直接运行即可:

#!/bin/bash

# 请自行修改路径,cd到boost解压后的目录下
dir=`dirname $0`
cd "$dir/../../third_party/boost_1_57_0"
# 如果库文件已存在,直接退出
if [ -e ./stage/lib/libboost_date_time.a ]; then
  echo "libraries exist. no need to build."
  exit 0
fi

# 以下代码参考 https://gist.github.com/rsobik/7513324

: ${COMPILER:="clang++"}
: ${IPHONE_SDKVERSION:=`xcodebuild -showsdks | grep iphoneos | egrep "[[:digit:]]+\.[[:digit:]]+" -o | tail -1`}
: ${XCODE_ROOT:=`xcode-select -print-path`}
: ${EXTRA_CPPFLAGS:="-DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++"}

echo "IPHONE_SDKVERSION: $IPHONE_SDKVERSION"
echo "XCODE_ROOT:        $XCODE_ROOT"
echo "COMPILER:          $COMPILER"

echo "bootstrap"
# 此脚本如果是被Xcode调用的话,会因为xcode export的某些变量导致失败,所以加了env -i。直接在命令行运行此脚本可以把env -i 去掉
env -i bash ./bootstrap.sh

echo "write project-config.jam"
# 默认生存的project-config.jam是编译Mac版的,这里直接调换掉
rm project-config.jam
cat >> project-config.jam <<EOF
using darwin : ${IPHONE_SDKVERSION}~iphone
: $XCODE_ROOT/Toolchains/XcodeDefault.xctoolchain/usr/bin/$COMPILER -arch armv7 -arch arm64 -fvisibility=hidden -fvisibility-inlines-hidden $EXTRA_CPPFLAGS
: <striper> <root>$XCODE_ROOT/Platforms/iPhoneOS.platform/Developer
: <architecture>arm <target-os>iphone
;
using darwin : ${IPHONE_SDKVERSION}~iphonesim
: $XCODE_ROOT/Toolchains/XcodeDefault.xctoolchain/usr/bin/$COMPILER -arch x86_64 -fvisibility=hidden -fvisibility-inlines-hidden $EXTRA_CPPFLAGS
: <striper> <root>$XCODE_ROOT/Platforms/iPhoneSimulator.platform/Developer
: <architecture>ia64 <target-os>iphone
;
EOF
# 上面的代码里,两个using darwin分别是编译真机版和模拟器版的设置。每多一种CPU架构就要再加一个-arch xxx。例如模拟器版,如果是32位的cpu,可以再加上-arch i386

echo "build boost iphone dev"
./bjam -j16 --with-date_time --with-filesystem --with-system --with-thread --build-dir=iphone-build --stagedir=iphone-build/stage toolset=darwin architecture=arm target-os=iphone macosx-version=iphone-${IPHONE_SDKVERSION} define=_LITTLE_ENDIAN link=static stage

echo "build boost iphone sim"
./bjam -j16 --with-date_time --with-filesystem --with-system --with-thread --build-dir=iphonesim-build --stagedir=iphonesim-build/stage --toolset=darwin-${IPHONE_SDKVERSION}~iphonesim architecture=ia64 target-os=iphone macosx-version=iphonesim-${IPHONE_SDKVERSION} link=static stage

echo "lipo"
# 把各架构下的库文件合一,在xcode里可以少设置些。做得更彻底些是各个分库和合成一个大库,不过除非是把静态库加入到代码仓库,否则是浪费时间了。要合成的话请参考https://gist.github.com/rsobik/7513324原文。
mkdir -p stage/lib
lipo -create iphone-build/stage/lib/libboost_date_time.a iphonesim-build/stage/lib/libboost_date_time.a -output stage/lib/libboost_date_time.a
lipo -create iphone-build/stage/lib/libboost_filesystem.a iphonesim-build/stage/lib/libboost_filesystem.a -output stage/lib/libboost_filesystem.a
lipo -create iphone-build/stage/lib/libboost_system.a iphonesim-build/stage/lib/libboost_system.a -output stage/lib/libboost_system.a
lipo -create iphone-build/stage/lib/libboost_thread.a iphonesim-build/stage/lib/libboost_thread.a -output stage/lib/libboost_thread.a
# 库文件最终放在./stage/lib/下

echo "Completed successfully"

集成到Xcode

做iOS的同学还是习惯完全用Xcode的吧。所以可以把上面的脚本集成到xcode里。在某个工程中,Xcode菜单File->New->Target…->Other->Aggregate->取名boost,Finish->在这个target的属性中选择Build Phases->点击左边的+号->New Run Script Phase->填入bash ./build_boost.sh->自己再填好库文件搜索路径和链接各个boost库。


2.Android平台编译

Android的编译方法有两种:一种是和iOS一样,自己覆盖project-config.jam引入NDK的编译工具设置,然后用bjam编译;另一种是自己写Android.mk。自己写project-config.jam因为要兼顾很多种CPU架构而较为麻烦,所以本文用后者。

环境

Ubuntu 14.04 64bit / Linux Mint 17 64bit

NDK r10c

boost 1.57

步骤

以下是Android.mk的内容:

include $(CLEAR_VARS)
LOCAL_PATH := $(ROOT_PATH)/third_party/boost_1_57_0
LOCAL_MODULE := boost
# 需要编译哪个库,自行把libs目录下的cpp加进来即可。
LOCAL_SRC_FILES +=   libs/filesystem/src/path.cpp   libs/filesystem/src/path_traits.cpp   libs/filesystem/src/operations.cpp   libs/filesystem/src/codecvt_error_category.cpp   libs/filesystem/src/portability.cpp   libs/filesystem/src/utf8_codecvt_facet.cpp     libs/date_time/src/gregorian/date_generators.cpp   libs/date_time/src/gregorian/greg_month.cpp   libs/date_time/src/gregorian/greg_weekday.cpp   libs/date_time/src/gregorian/gregorian_types.cpp   libs/date_time/src/posix_time/posix_time_types.cpp     libs/system/src/error_code.cpp
# 如果要把boost集成到动态库里,-fPIC是必须的,不然会有链接错误。原因请自行Google
LOCAL_CFLAGS += -fPIC -frtti -fexceptions
include $(BUILD_STATIC_LIBRARY)

3.Windows平台编译

环境

Windows 7 旗舰版 64bit SP1

Visual Studio Ultimate 2013

boost 1.57

步骤

以下是build_boost.bat的内容,直接执行即可:

cd ..\..\third_party\boost_1_57_0
if not exist .\b2.exe (
    call .\bootstrap.bat
    .\b2.exe -j5 --with-date_time --with-filesystem --with-system --with-thread --with-regex
)

集成到VS:

工程属性->Configuration Properties->Build Events->Pre-Link Event->Command Line->填入build_boost.bat


4.Linux平台编译

环境

Ubuntu 14.04 64bit / Linux Mint 17 64bit

gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

boost 1.57/1.58

步骤

直接编译。以下是终端命令

cd boost_1_57_0
bash bootstrap.sh
./b2

这样就能在boost_1_57_0/stage/lib/下找到所有的库文件。

如果用cmake来组织编译,以下是主工程的CMakeLists.txt里的部分内容:

include(ExternalProject)
ExternalProject_Add(boost
  SOURCE_DIR ${ROOT_DIR}/third_party/boost_1_57_0
  CONFIGURE_COMMAND bash ${ROOT_DIR}/third_party/boost_1_57_0/bootstrap.sh --with-libraries=date_time,thread,filesystem,system
  BUILD_COMMAND ${ROOT_DIR}/third_party/boost_1_57_0/b2 -j10 cflags=-fPIC cxxflags=-fPIC
  BUILD_IN_SOURCE 1
  INSTALL_COMMAND ""
)
set(
  BOOST_LIBRARIES
  ${ROOT_DIR}/third_party/boost_1_57_0/stage/lib/libboost_date_time.a
  ${ROOT_DIR}/third_party/boost_1_57_0/stage/lib/libboost_system.a
  ${ROOT_DIR}/third_party/boost_1_57_0/stage/lib/libboost_thread.a
  ${ROOT_DIR}/third_party/boost_1_57_0/stage/lib/libboost_filesystem.a
)
# ...
# 下面是设置链接和依赖
target_link_libraries(your_target ${BOOST_LIBRARIES})
add_dependencies(your_target boost)

5.Mac OS X编译

环境

OS X Yosemite 10.10.3

Xcode 6.3.1(6D1002)

boost 1.57

步骤

和Linux相同。

转载请注明出处:http://blog.csdn.net/hursing

时间: 2024-10-06 22:58:53

boost全平台编译方法的相关文章

C++ boost库无锁队列多线程并行测试与编译方法

阅读了网络中关于Boost库无锁队列的源代码,但却缺少编译方法.经过测试,确定了ubuntu 14.04中编译boost库的方法,特做记录. 无锁(free-lock)是实现高性能多线程并发编程的重要技术. 作为C++11 STL参考实现的boost库,不仅支持11标准,而且做了许多扩展,掌握其使用方法,对于提高代码质量,尤其重要. 以其多线程并行无锁队列为例,结合代码和说明,演示了无锁boost库的使用和编译方法. 代码及说明如下: //source: boost_queue.cpp //目的

Cocos2d-x 3.x 全平台新手开发配置教程

本文为Cocos2d-x 3.x 全平台(Android,iOS)新手开发配置教程攻略,希望对大家有所帮助.因为这篇文章是面对新手的.所以有些地方会啰嗦一些,请勿见怪.如果教程中有错误,欢迎指正.如果在配置开发平台时还遇到问题,欢迎大家讨论. 本文所使用的环境是PC(Win7),HTC G18,MacBook Air 以及 Mini iPad. 一.通用准备工作 1.安装Cocos2d-x 3.1 在Cocos2d官网上下载Cocos2d-x 3.1引擎,下载后解压缩. 2.安装Eclipse与

全平台轻量开源verilog仿真工具iverilog+GTKWave使用教程

前言 如果你只是想检查Verilog文件的语法是否有错误,然后进行一些基本的时序仿真,那么Icarus Verilog 就是一个不错的选择.相比于各大FPGA厂商的IDE几个G的大小,Icarus Verilog 显得极其小巧,最新版安装包大小仅有17MB,支持全平台:Windows+Linux+MacOS,并且源代码开源.本文将介绍如何使用Icarus Verilog来进行verilog文件的编译和仿真. 关于 Icarus Verilog Icarus Verilog是一个轻量.免费.开源的

Ogre3d Android平台编译教程

上一篇我们讲了Ogre3d 在 Window平台的编译流程方法 点击跳转 这一篇我们介绍 Ogre3d 编译到Android 平台的方法.可以和官方英文教程对照学习. 转载自博客 http://blog.csdn.net/huutu QQ:790621656 首先下载Ogre3d 依赖库源代码 和Ogre3d 源代码,下载方法在上一篇中介绍了,这里不再重复. 转载自博客 http://blog.csdn.net/huutu QQ:790621656 编译工具:NDK.Visual Studio.

Cocos2d-x移植到Android平台编译的两个文件Android.mk和Application.mk

背景 首先,说说文章的背景.最近手中的一个项目,由于需求中要求提供Web界面的打印功能,当然如果没有打印机,还可以提供保存到本地.项目组长把这个"小任务"分给了我.本着努力为组长分忧解难的思想,领了任务之后,就马上开始了工作. 问题 刚开始的时候,组长给了一个工具(jatoolsprinter)让我研究,我用了一个多小时的时间,做出了一个简单的Demo,然后就是各种的测试,由于 web 打印需要浏览器安装 ActiveX 组件,在随后的测试中,我用了几款浏览器,甚至把安全级别都调到了最

unix环境高级编程编译方法 -apue最简单编译方法(第二版)

<UNIX环境高级编程>(这里使用的是第二版本的源码)每个历程中,都会有这样一行源码: #include "apue.h" 这个头文件是作者把把每个例程中常用的标准头文件,一些常用的出错处理函数(err_**()之类的函 数)和一些常用的宏定义给整理在一个头文件中.这个可以省去在每个例程中录入较多的重复代码,这样可 以减少每个例程的长度.给读者带来了不少麻烦.下面给出一种源代码的编译方法. 1.解压文件到apue.2e目录 2.修改相应平台的文件,我使用的是linux,所以

Boost下载安装编译配置使用指南(含Windows和Linux

理论上,本文适用于boost的各个版本,尤其是最新版本1.45.0:适用于各种C++编译器,如VC6.0(部分库不支持),VS2003,VS2005,VS2008,gcc,C++ Builder等.先总结一下Windows系统.一.下载首先从boost官方主页附链接下载最新版boost安装包(目前最新版是boost_1_45_0.7z).二.安装将boost安装包解压至本地目录,如:E:\SDK\boost_1_45_0.因为boost一部分类是需要编译成库才能使用的,所以我们还需要准备好boo

Boost下载安装编译配置使用指南

理论上,本文适用于boost的各个版本,尤其是最新版本1.46.0:适用于各种C++编译器,如VC6.0,VS2003,VS2005,VS2008,gcc,C++ Builder等. 一.下载 首先从boost官方主页http://www.boost.org下载最新版boost安装包(目前最新版是1.46.0).因为boost一部分类是需要编译成库才能使用的,所以我们还需要准备好boost专用的编译辅助工具bjam.网上很多人都提倡直接使用boost安装包中附带的bjam源码来编译出bjam,但

QxOrm 1.2.9 下载 以及编译方法 简介.

QxOrm 是一个基于QT开发的数据库方面的ORM库,功能很强大,是QT C++数据开发方面的好工具. 目前已经更新1.3.1 .但 不幸的是 它的官网http://www.qxorm.com/ 莫名其奇妙的进不去,要FQ才可以 访问,但是即使FQ,好像也不能下上面的东西.另外这软件的sourceforg 网址也不能下载 ,只留个 文本文件指向官网. 找来找去找了个  1.2.9 版本的,比目前 普遍的1.2.6版本 要新一点.这是下载地址. http://download.csdn.net/d