boost库生成文件命名和编译

生成文件命名规则: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等参数.

时间: 2024-10-31 13:03:34

boost库生成文件命名和编译的相关文章

我想在 wp8 上使用boost库,但是不知道怎么编译出arm 的lib库,有谁知道吗?

问题描述 我想在 wp8 上使用boost库,但是不知道怎么编译出arm 的lib库,有谁知道吗? 我想在 wp8 上使用boost库,但是不知道怎么编译出arm 的lib库,尝试了很多方法多不能编译, 使用 b2 toolset=msvc-11.0 architecture=arm address-model=32 cxxflags="-DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP" stage 命令,只能编译成功几个库,线程库,data_time,正

VS2010 编译安装boost库

实践是最好的办法..学习C++,想试试线程,然后打算用boost库,结果boost库编译差点吓到我..没看到比较完整的安装教程..一直耽搁.今天动手.完成了.方法记录如下:1.下载boost从boost官网( http://www.boost.org )上下载最新的boost版本,现在最新是1.49版本,解压到自定义目录(我解压到了D:/program files,最终的目录结构是D:\Program Files\boost_1_49_0) 2.编译安装 在D:\Program Files\bo

vc++-VC6如何在生成动态链结库的文件(DLL)里调用SQL2000

问题描述 VC6如何在生成动态链结库的文件(DLL)里调用SQL2000 VC6如何在生成动态链接库的文件(DLL)里调用SQL2000,最终该文件要用于VFP环境内, 也就是要在SET LIBARY TO XX.DLL里调用里的函数,该问题很是急,麻烦大侠们高抬贵 手! 解决方案 VC产生动态链接库以及调用sql server都不麻烦,只是看你vfp能不能调用了.你的具体问题是什么. 解决方案二: 生成标准windows DLL,用_stdcall调用约定来封装DLL的导出函数等. 解决方案三

冲突-c++boost库编译出问题

问题描述 c++boost库编译出问题 1> Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).1>libboost_thread-vc100-mt-1_49.lib(thread.obj) : error LNK2038: 检测到"_ITERATOR_DEBUG_LEVEL"的不匹配项: 值"0"不匹配值"2"(main.obj 中)1>libboost_thread-

linux t 编译库so-linux下Qt编译库so文件

问题描述 linux下Qt编译库so文件 qt在linux编译后会产生四个so文件,so.so.1.so.1.0.so.1.0.0, 调用这个库时好像找的是so.1这个库. 问题1:如何让调用者找的是so这个库,然后再连接其他到实体库. 问题2:如何编译后只生成一个库文件,只要so.1.0.0. 谢谢!!! 解决方案 ? ? ? ? ? ? ?这里我的Qt是安装在默认的路径/opt下.使用的系统是OpenSuSE12.3 64位,Qt的版本是5.3.1.这里安装Qt时,必须勾选源码也安装上.因为

Boost库在Windows平台下的编译

最近正在学习Boost库,过一久要用它来进行一些跨平台的开发:使用thread线程库来开发多线程 的程序(就是我的那个CodingWar项目:-P),所以自己动手进行了下面的Boost配置编译工作. 一.编译前的准备 我的VC++2005安装在"D:\Microsoft Visual Studio 8\VC"目录:下载boost库后解压, 根目录为:"D:\C_C++\boost_1_33_1",可参考改为相应的目录即可. 二.编译步骤 1.执行:"D:\

boost 编译 vs 安装-编译好的boost库写程序报错:boost_atomic-vc110-mt-1_53.dll

问题描述 编译好的boost库写程序报错:boost_atomic-vc110-mt-1_53.dll fatal error LNK1107,文件无效或损坏,无法在 0x288 处读取.刚开始用vs2010来编译boost_1_56_0,1_53_0,1_43_0三个版本,全是这个错误.后来重装系统,用vs2012编译boost_1_53_0,还是报这个错误.难道是电脑的原因吗?有什么解决的方法 解决方案 boost这几个版本都可以用VS2012等编译,是不是你的版本有问题 多看看它自带的编译

C编译: 动态连接库 (.so文件)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   在"纸上谈兵: 算法与数据结构"中,我在每一篇都会有一个C程序,用于实现算法和数据结构 (比如栈和相关的操作).在同一个程序中,还有用于测试的main()函数,结构体定义,函数原型,typedef等等. 这样的做法非常不"环保".算法的实际运用和算法的实现混在一起.如果我想要重复使用之前的源程序,必须进行许多改动,并且重新编译.最好的解决方案是实

c++-同时使用STLport和boost库时编译通过,但链接失败,求解决方案,急!!!

问题描述 同时使用STLport和boost库时编译通过,但链接失败,求解决方案,急!!! 具体问题是这样的: 我用的是vs2008,把STLport和boost库都加入项目,编译时报错:boostconfigauto_link.hpp(204): fatal error C1189: #error : "Build options aren't compatible with pre-built libraries" 解决方法是在 项目属性->c/c++->命令行 添加