Building Boost libraries for Visual Studio

来源:互联网 发布:手机画画软件 编辑:程序博客网 时间:2024/06/06 08:21
原文:http://www.codeproject.com/kb/tips/Building_boost_libraries.aspx
有空就翻译

Building boost libraries for Visual Studio
  • Download source files - 1.96 KB

Introduction

The Boost initiative is the next hottest thing after STL for the C++ community. While the documentation is quite good, it can be overwhelming to get a quick start. This simple article explains a method of building Boost libraries. I wrote it because many questions in the newsgroups are about linker errors, which happen if you try to link against some of the Boost libraries. The original article was written with Boost version 1.33, but the updated version works only with the new Bjam syntax which was introduced with version 1.34.

Boost

While most of the Boost libraries are template-based, some of them - e.g. date-time, regex, filesystem, signals - come with CPP source files and thus require actual code to be generated. Boost uses a build system called Bjam, which can be configured for a lot of platforms. I work only on Windows with Visual Studio 2003, I'll describe here a configuration for this combination. At work though, we already use Visual Studio 2008.

Building Boost

After downloading the Boost libraries and unpacking them in a folder - referenced in this article with <boost_root>, e.g. on my PC it is C:/work sdk/boost, the libraries need to be built:

  1. Build Bjam
  2. Build the Boost libraries

Building Bjam

Bjam can be built in two ways:

  • Use the 'bootstrap.bat' batch file located in <boost_root>. Run this batch file and Bjam will be automatically built and added to the root.
  • Build Bjam 'manually': browse to <boost_root>/tools/build/jam_src and run build.bat from a command prompt. This will start to build Bjam, which ends up in <boost_root>/tools/build/jam_src/bin.ntx86/bjam.exe. Copy this file to the root of Boost, <boost_root>.

Building Boost Libraries

The Bjam system must be told that you want to build debug/release libraries, build with threading in mind, and link against various options of the STL or platforms. I only use Visual Studio with Plauger's STL, but use two different versions of Visual Studio:

  1. Build a debug build with multithreading and dynamic linking for VC++ 7.1.
  2. Build a release build with multithreading and dynamic linking for VC++ 7.1.
  3. Build a debug build with multithreading and dynamic linking for VC++ 9.0.
  4. Build a release build with multithreading and dynamic linking for VC++ 9.0.

With the release of Visual Studio 2005 / 2008, Microsoft supports side by side installations of the crt. With manifests, one can bind a module to a specific version of the crt. The Boost libraries are dependent on the crt as well, and you can instruct the build process to use the latest version through a '_BIND_TO_CURRENT_VCLIBS_VERSION' define. This leads to the following options for Visual Studio 2003 / 2008:

  1. bjam toolset=msvc-7.1 variant=debug threading=multi link=shared
  2. bjam toolset=msvc-7.1 variant=release threading=multi link=shared
  3. bjam toolset=msvc-9.0 variant=debug threading=multi link=shared define=_BIND_TO_CURRENT_VCLIBS_VERSION
  4. bjam toolset=msvc-9.0 variant=release threading=multi link=shared define=_BIND_TO_CURRENT_VCLIBS_VERSION

I've already made four batch files with the same command(s):

  • zbuilddebug_vc71.bat
  • zbuildrelease_vc71.bat
  • zbuilddebug_vc90.bat
  • zbuildrelease_vc90.bat

Copy these batch files to the root of Boost, <boost_root>. Now the libraries can be built:

  1. Open the command prompt.
  2. Run vcvars32.bat from Visual Studio.
  3. Run the batch files, e.g. zbuilddebug_vc71.bat.

Bjam will now try to build the libraries.

Building All

For the stressful software engineer, I offer here two batch files which will do it all together: they build bjam if it does not exist and build the debug and release mode libraries in one go:

  • zbuildall_vc71.bat
  • zbuildall_vc90.bat

After the build process has finished, the library executables are created in the <boost_root>/bin.v2 directory, e.g.:

  • boost_date_time-vc71-mt-gd-1_41.dll for the multithreaded debug build of a date-time library.
  • boost_date_time-vc71-mt-1_41.dll for the multithreaded release build of a date-time library.

Because all of these files are built under their own library names, one can copy them all - i.e. search on 'mt-gd-1_41 and mt-1_41 - to one location and adjust Visual Studio to point to this library location. Alternatively one can use the <boost_root>/stage directory. However this directory does not contain the associated PDBs, which is unhandy during debugging.

Using Boost Libraries

We have built the shared libraries and therefore we have to instruct Visual Studio to link against them. Fortunately, Boost has incorporated an "autolink" feature. Thus, with the preprocessor one can link to the correct libraries. Define the following preprocessor statements:

  • BOOST_ALL_DYN_LINK
  • BOOST_LIB_DIAGNOSTIC

Even better, include a header file in your precompiled header before including a Boost header:

  • BoostDefines.hpp

Room for Improvement

  • For some reason, the "normal," i.e. non-dynamic, libraries get built.
  • Python library should also get built, but for some reason it gets excluded.
  • Visual Studio 2005 introduces the safe C and iterator concepts. Boost libraries don't like them and should be turned off.

History

  • 11 September, 2005 - Original version posted
  • 18 July, 2007 - Updated with Boost 1.34 syntax
  • 25 November 2009 - Updated with manifests and the 'all' batch file; removed old syntax

Credits

  • Leon Wiertz: tip about manifests and the 'all' batch file

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Gast128


Software Developer (Senior)

Netherlands Netherlands

Member
Born in the Netherlands in 1971. Spent since 1998 years as a software engineer programming Windows application(s) using, C++, MFC, STL and Boost.
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信改名含有特殊符号怎么办 户口名字打错了怎么办 寻仙会心几率差怎么办 注册商标下来了没收到怎么办 金融公司倒闭欠的钱怎么办 买车贷款被骗了怎么办 定投终止后钱怎么办 受到小贷公司催款威胁怎么办 合同保证金单据丢了怎么办 公司注销期间发现欠税怎么办 公司注销后银行账户怎么办 注销公司营业执照和公章丢失怎么办 工商核名过期了怎么办 核名后的许可没办下来怎么办 重庆公司核名有同名的怎么办 新电视不全屏怎么办左右有黑边 所学类别找不到音乐表演怎么办 公司口头通知不续签合同怎么办 雪纺衬衣皱了怎么办 狗打架受伤怎么办泰迪 大狗打架破了怎么办 舌头上长溃疡怎么办吃什么药 悠悠球不回弹怎么办啊 围棋遇到对方不停围堵怎么办? s围棋业余四段想提升怎么办 wps禁止创建分享链接怎么办 驾驶人开车违章不认可怎么办 京东白条退货分期服务费怎么办 新车年检标丢了怎么办 异地违章罚单丢了怎么办 异地现场违章罚单丢了怎么办 新车没有牌照过停车杆怎么办 驾照换证时间过了怎么办 杭州告知单丢了怎么办 电工证过了复审日期怎么办 大人有居住证小孩没有怎么办 异地补办身份证没有暂住证怎么办 挂科了心里难受怎么办 c1升b2考不过怎么办 b2驾照扣了1分怎么办 红绿色盲驾考怎么办