« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9706418 建立时间:2004年12月20日 |

| |
[c++]vc8编译boost  原创空间, 软件技术, 电脑与网络
邢红瑞 发表于 2007/10/19 18:14:49 |
最近我自己上vc6很不争气,很多以前正常编译的东西,也可以正常编译,就是不正常运行,只好使用vc8。在vc8上编译boost被气得半死,编译Boost::regex库时失败,提示C4819错误,记得 VC7.1可以把Boost::regex库编译出来。boost的源码肯定有问题,源代码肯定有错,而且是语法错误, 让我对整个库的正确性都失去信心了,发布库的人有没有测试啊。。。开源项目带来的问题一般要比它能解决的问题要多。另外也说一句,C++更高版本(VC6以上)的应用,C++正在走火入魔中,编译器玩得过火,和当年的borland一样,bc++3.1的工程,bc4.5编译不过去,大家没有时间等bc++5.0出来,很多人去用vc4了。据说直接打开regex_trailts_defaults.cpp,把所有/*?/都替换删除,就可以了,但是他的源码 ,我干吗要修改。新的boost 版本boost_1_34_1据说可以,还提供了Foreach Library 用于简化对一个序列中的所有元素进行迭代。Xpressive Library 提供了更高阶的正则表达式支持。此库融合了 boost.regex 和 Spirit Parser Framework 的优点。以 C++ 表达式来编写正则表达式,好处是可以在编译期获悉语法的合法性,而且以这种方式表达的正则表达式可以互相引用,不像原先的 boost.regex, 只能在运行时进行语法检查和各种处理。编译regex库从开始菜单打开visual studio 2005 command prompt运行 cd D:\boost_1_34_1\boost_1_34_1\libs\regex\build输入 d:运行 namke vc8.mak然后一切ok,开始使用。编译boost大多数库进入visual studio 2005 command promptcd D:\boost_1_34_1\boost_1_34_1\tools\jam运行 build_dist.bat 不是build.bat,生成bjam.exe,没有zip,无法生成boost-jam-3.1.14-1-ntx86.zip,不过不影响使用。将D:\boost_1_34_1\boost_1_34_1\tools\jam\src\bin.ntx86\bjam.exe复制到D:\boost_1_34_1\boost_1_34_1下修改user-config.jam (D:\boost_1_34_1\boost_1_34_1\tools\build\v2\user-config.jam) 的MSVC configuration相应的加入using msvc : 8.0 : : <compileflags>/wd4819 <compileflags>/D_CRT_SECURE_NO_DEPRECATE <compileflags>/D_SCL_SECURE_NO_DEPRECATE <compileflags>/D_SECURE_SCL=0 ;_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE用于关闭safe code代码警告, _SECURE_SCL用于控制是否用safe code对STL边界进行检查。C4819 : 代码文件中有cp936无法表示的字符,不影响编译,只要加上/wd4819 /D_CRT_SECURE_NO_DEPRECATE就可以不显示这两个错误。或者修改boost.build来抑制这两个错误的显示
boost.build分为v1和v2两个版本v1:修改$(BOOST_ROOT)/tools/build/v1/vc-8_0-tools.jam将 flags vc - 8_0 C ++ FLAGS : / Zc:forScope ;
改为 flags vc - 8_0 C ++ FLAGS : / Zc:forScope / wd4819 / D_CRT_SECURE_NO_DEPRECATE ;
v2:cvs版本修改$(BOOST_ROOT)/tools/build/v2/tools/msvc.jam在 # 8.0 adds some more options
一行的下方加上 flags msvc.compile CFLAGS $(condition) : / wd4819 / D_CRT_SECURE_NO_DEPRECATE ;
boost 1.33.1版本将 # 8.0 deprecates some of the options if ! [ MATCH ^ ([ 67 ]. * ) : $(version) ] { flags msvc.compile CFLAGS $(condition) /< optimization > speed : / O2 ; flags msvc.compile CFLAGS $(condition) /< optimization > space : / O1 ; flags msvc.link.dll MANIFEST : " mt -manifest " ; flags msvc.link.dll OUTPUTRESOURCE : " -outputresource: " ; }
改为: # 8.0 deprecates some of the options if ! [ MATCH ^ ([ 67 ]. * ) : $(version) ] { flags msvc.compile CFLAGS $(condition) : / wd4819 / D_CRT_SECURE_NO_DEPRECATE ; flags msvc.compile CFLAGS $(condition) /< optimization > speed : / O2 ; flags msvc.compile CFLAGS $(condition) /< optimization > space : / O1 ; flags msvc.link.dll MANIFEST : " mt -manifest " ; flags msvc.link.dll OUTPUTRESOURCE : " -outputresource: " ; }编译boostvisual studio 2005 command prompt执行D:\boost_1_34_1\boost_1_34_1\bjam.exe设定环境Tools -> Options -> Projects and Solutions -> VC++ Directories在Library files加上D:\boost_1_34_1\boost_1_34_1\bin.v2\libs在Include files加上D:\boost_1_34_1\boost_1_34_1\bin.v2\include |
|
» 1 »
|