zoukankan      html  css  js  c++  java
  • vs 2008 编译boost 1.35.0

    vs 2008 编译boost 1.35.0

    boost 1.35.0已经内置了1.34.1为让vs2008编译所需要修改的内容。所以不再需要手工修改。虽然boost 1.35.0文档中说目前不支持vs2008,以后会支持。但是经过一番折腾,发现实际上可以编译。

    例如:

    M:"CODE"VNN4"OUTER"boost_1_35_0>bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x86_9 — without-python –without-mpi –without-regex –toolset=msvc-9.0 –build-type=complete –prefix=m :"boost86 install

    M:"CODE"VNN4"OUTER"boost_1_35_0>bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x64_9 — without-python –without-mpi –without-regex –toolset=msvc-9.0 –build-type=complete address-model=64 –prefix=m :"boost64 install

    需要注意的是,build-type=complete很重要,否则没有debug版本,没法调试进入boost库。

    尽量应该使用vc2008 start菜单中的Visual Studio 2008 Command Prompt来进行编译。64位版本则应该使用vs2008 start菜单中的Visual Studio 2008 x64 Win64 Command Prompt来进行编译。似乎普通cmd也可以,但是为保险起见,建议还是用vc菜单中的cmd。

    注意1.35.0中regex库似乎有些问题,这个库如果不指定-sICU_PATH,则可以用build-type=complete,如果指定 -sICU_PATH,不指定build-type=complete也可以。x86和x64都没问题。但是如果同时指定-sICU_PATH和 –build-type=complete则会有问题。

    M:"CODE"VNN4"OUTER"boost_1_35_0>bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x86_9 — without-python –without-mpi –toolset=msvc-9.0 –build-type=complete –prefix=m :"boost86 install warning: Graph library does not contain optional GraphML reader. note: to enable GraphML support, set EXPAT_INCLUDE and EXPAT_LIBPATH to the note: directories containing the Expat headers and libraries, respectively. Building Boost.Regex with Unicode/ICU support enabled Using ICU in m:"icu4c-3_8-src"icu_x86_9/include Skipping build of: ./install <build>no in common properties Skipping build of: ./install <build>no in common properties Skipping build of: ./install <build>no in common properties Skipping build of: ./install <build>no in common properties Skipping build of: libs/regex/build/icucore <build>no in common properties Skipping build of: libs/regex/build/icuin <build>no in common properties Skipping build of: libs/regex/build/icudata <build>no in common properties M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/kernel"class.jam:93: in new *** argument error * rule object(searched-lib-target)@54887.__init__ ( name : project : shared ? : search * : action ) * called with: ( icudt icuin icuuc : object(project-target)@158 : true : /m:/icu 4c-3_8-src/icu_x86_9/lib : object(null-action)@54886 : : : : ) * extra argument icuin M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/tools"builtin.jam:349:see definit ion of rule ‘__init__’ being called M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/tools"builtin.jam:592: in object( searched-lib-generator)@6.run M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/build"generators.jam:859: in try- one-generator-really M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/build"generators.jam:920: in try- one-generator M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/build"generators.jam:1131: in con struct-really M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/build"generators.jam:1204: in gen erators.construct M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/tools"builtin.jam:496: in object( lib-generator)@5.run M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/build"generators.jam:859: in try- one-generator-really M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/build"generators.jam:920: in try- one-generator M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/build"generators.jam:1131: in con struct-really M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/build"generators.jam:1204: in gen erators.construct M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/build"targets.jam:1368: in constr uct M:/CODE/VNN4/OUTER/boost_1_35_0/tools/build/v2/build"targets. M:"CODE"VNN4"OUTER"boost_1_35_0>

    怀疑是因为icu库本身的sln和prj文件中并没有static link的选项。

    最后采用如下方法解决:

    如果是x64

    bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x64_9 –with-regex –toolset-msvc address-model=64 release

    bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x64_9 –with-regex –toolset-msvc address-model=64 debug

    bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x64_9 –with-regex –toolset=msvc msvc/link=static address-model=64 debug

    bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x64_9 –with-regex –toolset=msvc msvc/link=static address-model=64 release

    如果是x86

    bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x86_9 –with-regex –toolset-msvc  release

    bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x86_9 –with-regex –toolset-msvc  debug

    bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x86_9 –with-regex –toolset=msvc msvc/link=static debug

    bjam -a -sICU_PATH=m:"icu4c-3_8-src"icu_x86_9 –with-regex –toolset=msvc msvc/link=static release

    没有编译static link c++ runtime lib的static lib,只编译了动态link c++ runtime lib的dll以及static lib

    注意编译完之后的dll,lib以及libxxx.lib拷贝到目录下时,要同时去掉1_35拷贝一份,因为boost头文件中通过prgram(link)进行的auto link指向的lib不包含1_35后缀

    附注:

    bjam还有其他一些选项,例如

    bjam –toolset=msvc msvc/architecture=x86/address-model=64/runtime-link=shared/link=shared debug stage

    This entry was written by alpha and posted on 2008-04-01 at 10:35 am and filed under boost, c++. Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback: Trackback URL.
  • 相关阅读:
    [Swift]LeetCode20. 有效的括号 | Valid Parentheses
    [Swift]LeetCode14. 最长公共前缀 | Longest Common Prefix
    [Swift]LeetCode13. 罗马数字转整数 | Roman to Integer
    [Swift]LeetCode9. 回文数 | Palindrome Number
    [Swift]LeetCode7. 反转整数 | Reverse Integer
    [Swift]LeetCode2. 两数相加 | Add Two Numbers
    [Swift]LeetCode1 .两数之和 | Two Sum
    3人小公司1年的创业成本
    3人小公司1年的创业成本
    OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)
  • 原文地址:https://www.cnblogs.com/chenhs/p/1270752.html
Copyright © 2011-2022 走看看