boost编译中的细节问题

原文链接 http://www.cppblog.com/Robertxiao/archive/2013/01/06/197022.html

生成文件命名规则:boost中有许多库,有的库需要编译、而有的库不需要编译,只需包含头文件就可以使用。编译生成的文件名字普遍较长,同一个库根据编译链接选项不同,又可以生成多个不同名字的文件。生成的文件名字是很长,可是这样带的信息才多,也就容易识别出用途。其实生成文件的名字遵循一定的规则,有着固定的格式。识别这种格式,能帮助我们更高效地使用boost库。生成文件名字格式如:

BOOST_LIB_PREFIX + BOOST_LIB_NAME + "-" + BOOST_LIB_TOOLSET + "-" + BOOST_LIB_THREAD_OPT + "-" + BOOST_LIB_RT_OPT + "-" + BOOST_LIB_VERSION

这些定义为:

  BOOST_LIB_PREFIX: 静态库为 "lib" (否则无,是用动态链接库)

  BOOST_LIB_NAME: 库的基本名称 ( 比方说 boost_regex).

  BOOST_LIB_TOOLSET: 编译工具集名称 ( 比如:vc6, vc7, bcb5 )

  BOOST_LIB_THREAD_OPT: 多线程为 "-mt" ,否则为空

  BOOST_LIB_RT_OPT: 指示使用的运行库的后缀,

组合下面的一个或者更多字符:

s 静态运行库,指的是静态链接到运行时库(不出现表示动态).

g 调试/诊断 runtime (release if not present).

d 调试版本 (不出现表示 release 版 ).

p STLPort 版本.

注:对 vc 来说,gd 总是一起出现

  BOOST_LIB_VERSION: Boost 版本, Boost 版本 x.y 表示为 x_y形式.
 
 编译:为了简化boost库的编译,boost库中带了一个用来编译的工具,名字是bjam.exe或者b2.exe.

1:运行boost下的bootstap.bat脚本就会自动生上述的两个编译工具,并且拷贝到boost目录下. 也可以进入tools/build目录下找到类似的脚本或者项目源码来编译.

2: bjam.exe的参数


Feature


Allowed values


Notes


variant


debug,release


link


shared,static


Determines if Boost.Build creates shared or static libraries


threading


single,multi


Cause the produced binaries to be thread-safe. This requires proper support in the source code itself.


address-model


32,64


Explicitly request either 32-bit or 64-bit code generation. This typically requires that your compiler is appropriately configured. Please refer to the section called “C++ Compilers” and your compiler documentation in case of problems.


toolset


(Depends on configuration)


The C++ compiler to use. See the section called “C++ Compilers” for a detailed list.

(Vs2008)msvc-8.0 (vs2010)msvc-10.0


include


(Arbitrary string)


Additional include paths for C and C++ compilers.


define


(Arbitrary string)


Additional macro definitions for C and C++ compilers. The string should be either SYMBOL or SYMBOL=VALUE


cxxflags


(Arbitrary string)


Custom options to pass to the C++ compiler.


cflags


(Arbitrary string)


Custom options to pass to the C compiler.


linkflags


(Arbitrary string)


Custom options to pass to the C++ linker.


runtime-link


shared,static


Determines if shared or static version of C and C++ runtimes should be used.


--build-dir=<builddir>


编译的临时文件会放在builddir里(这样比较好管理,编译完就可以把它删除了)


--stagedir=<stagedir>


存放编译后库文件的路径,默认是stage


--build-type=complete


编译所有版本,不然只会编译一小部分版本(确切地说是相当于:variant=release, threading=multi;link=shared|static;runtime-link=shared)


variant=debug|release


决定编译什么版本(对应文件中的d 调试版本 不出现表示 release 版)


link=static|shared


决定使用静态库还是动态库。(对应文件中的BOOST_LIB_PREFIX )


threading=single|multi


决定使用单线程还是多线程库。(对应文件中的BOOST_LIB_THREAD_OPT)


runtime-link=static|shared


决定是静态还是动态链接C/C++标准库。(对应文件中的BOOST_LIB_THREAD_OPT)


--with-<library>


只编译指定的库,如输入--with-regex就只编译regex库了。


--show-libraries


显示需要编译的库名称

bjam.exe --toolset=msvc-10.0 --with-date_time runtimelink=static link=static stage 
意思是要生静态库,该静态库静态链接C运行时库
生成的文件名字是:libboost_date_time-vc100-mt-sgd-1_48.lib(debug version),libboost_date_time-vc100-mt-s-1_48.lib(release version) 两个文件.

bjam.exe --toolset=msvc-10.0 --with-date_time runtimelink=shared link=static stage
意思是要生静态库,该静态库动态链接C运行时库
生成的文件名字是:libboost_date_time-vc100-mt-gd-1_48.lib(debug verion),libboost_date_time-vc100-mt-1_48.lib(release version) 两个文件.

bjam.exe --toolset=msvc-10.0 --with-date_time runtimelink=shared link=shared stage
意思是要生动态库,该动态库动态链接C运行时库
生成的文件名字是:boost_date_time-vc100-mt-gd-1_48.lib(debug version),boost_date_time-vc100-mt-1_48.lib(release version) 两个文件.
生成的dll名字是:boost_date_time-vc100-mt-gd-1_48.dll(debug version),boost_date_time-vc100-mt-1_48.dll(release version)

编译选项方面还有install等参数.

原文地址:https://www.cnblogs.com/m-zhang-yang/p/12614620.html

时间: 2024-11-06 20:50:20

boost编译中的细节问题的相关文章

VS2010 Boost编译安装(转载)

把项目从VS2008搬到VS2010的时候,导入原来的编译好的boost库居然连接失败, 提示:LINK : fatal error LNK1104: 无法打开文件“libboost_system-vc100-mt-1_47.lib”  错误 网上找答案,才知道不同的编译器所使用的boost库编译命令是不同的: 输入bjam --toolset=msvc-10.0 --build-type=complete stage 开始编译(VS2010的) (如果是VS2005, 则为msvc-8.0:如

boost库中的 program_options

1.阅读rviz中的源码时在rviz/visualizer_app.cpp中遇到如下代码: po::options_description options; options.add_options() ("help,h", "Produce this help message") ("splash-screen,s", po::value<std::string>(), "A custom splash-screen ima

ubuntu下boost编译安装

ubuntu下boost编译安装 boost 安装 1.依赖安装 apt-get install mpi-default-dev libicu-dev python-dev python3-dev libbz2-dev zlib1g-dev 2.访问boost官网下载boost最新版本 3.解压下载文件,例如下载文件在~/Downloads下 cd ~/Downloads tar --bzip2 -xvf boost_1_58_0.tar.bz2  4.准备安装 cd boost_1_58 ./

我的编程之路(十九) 开发中一些细节与启发

1.js的命名空间           如果写后台代码,分层是潜意识中的基本常识,但是一到了前台,却没了这种意识,归根结底还是js用的不多,也一直没有在意js的地位,直到现在富客户端的趋势与要求,使得很多代码都要在前台用js或其框架完成,所以对于js代码的管理就要像后台java代码一样有其规范了,而命名空间就是package,也是为了管理不同层次的代码. 2.闭包          闭包就是能够读取其他函数内部变量的函数.它的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值

linux编译中的常见问题

转linux编译中的常见问题 错误提示:Makefile:2: *** 遗漏分隔符 . 停止. 原因makefile中 gcc语句前 缺少一个 tab分割符 错误提示: bash: ./makefile: 权限不够 原因 makefile 是文本文件不可执行,即使是root,也会权限不够 我们应该在命令行下使用make, 该指令会自动搜寻所在目录下的makefile文件,如果使用其他名称如(makefile.am)则应加参数指出,如:make -f makefile.am 错误提示 : a.c:

boost编译配置及简单使用

boost编译配置及简单使用 1.下载 http://www.boost.org/ 2.编译: A.解压 boost_1_55_0.zip 到boost路径 B.运行 bootstrap.bat. 会生成2个文件,分别是bjam.exe 和 b2.exe. bjam是早起的文件,新版本用b2比较好 C.可以查看b2.exe的用法,在cmd里面输入 "b2 --help" 这里基本上有各个参数的用法和意思. boost全部编译会消耗很多时间,一般需要编译的是与操作系统相关的. 可以用命令

模拟实现c++标准库和boost库中的智能指针

我们知道c++标准库中定义了智能指针auto_ptr,但是我们很少用它,因为虽然它能够自动回收动态开辟的内存,不需要程序员自己去维护动态开辟的内存,但是当用它去赋值或者是拷贝构造时有一个管理权转移的过程,这样我们就不能很方便的使用auto_ptr. 下面是简单的auto_ptr的实现,我们可以看到在复制和赋值时它将转移管理权. template<class T> class AutoPtr { public:      AutoPtr(T* ptr)       :_ptr(ptr)     

程序猿之---C语言细节17(求time_t的最大值、strlen求的是长度、malloc分配字符内存细节、switch的中default细节)

主要内容:求time_t的最大值.strlen求的是长度.malloc分配字符内存细节.switch的中default细节 #include <stdio.h> #include <time.h> int main() {     /*****************************************************************         time_t最大值测试     ************************************

55 gcc编译中出现“游离”错误

exam1204button.c:26:3: 错误: 程序中有游离的'\200' exam1204button.c:26:3: 错误: 程序中有游离的'\235' exam1204button.c:26:3: 错误: 程序中有游离的'\342' exam1204button.c:26:3: 错误: 程序中有游离的'\200' exam1204button.c:26:3: 错误: 程序中有游离的'\235' 类似的错误大多数都是由于中文输入法输入的字符和英文字符不同导致的,检查引号.括号.分号 5