VS2010下使用STLport编译boost时遇到的一些问题

来源:互联网 发布:seo原创怎么写 编辑:程序博客网 时间:2024/05/16 10:33
       历经了两天,终于把boost编译成功了,其中是碰到各种问题,好在都能从网上找到解决办法,并顺利解决。在这里我就不说具体的编译步骤了,网上或者帮助文档中都有详细讲解,这里只说说我遇到的问题及解决办法。
       先说说版本,从官网下载最新的boost库(http://www.boost.org/)boost1.55.5,从STLport官网(http://www.stlport.org/)下载最新版本的STLport5.2.1,在VS2010下编译。

       下面说说问题。

       1、编译时出现“function '__int64 abs(__int64)' alread has a body”,具体描述如下:

         D:\STLport\\stlport\stl/_cstdlib.h(158): error C2084: function '__int64 abs(__int64)' already has a body

         C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\../include/stdlib.h(471) : see previous definition of 'abs'

         NMAKE : fatal error U1077: '"C:\ProgramFiles\Microsoft Visual Studio 10.0\VC\BIN\cl.EXE"' : return code '0x2'

        原因可能是STLport还没有支持2010,解决办法比较简单,将问题描述中提到的目录下的_cstdlib.h的第158行按如下格式修改即可。

         #if !defined(_STLP_MSVC) || (_STLP_MSVC < 1600)

         inline _STLP_LONG_LONG  abs(_STLP_LONG_LONG __x) { return __x < 0? -__x : __x; }

         #endif 

        然后再次编译就能很快的将stlport编译完成了。


        2、编译时出现"'nullptr_t':is not a member of 'stlpd_std'"

        当我们在编译boost时,编译过程会报出如上所示的错误,这个问题的原因在于,stlport不支持C++11标准中新增的nullptr_t和nullprt关键字,因此会出现这个错误,从网上查找到的解决办法是:

        在d:\stlport\stlport\cstddef文件中增加下面一段代码即可,

         #ifdef __cplusplus

           namespace std{typedef decltype(__nullptr)nullptr_t;}

           using  ::std::nullptr_t;

         #endif

        添加,重新编译就通过了。


        以上两个问题就是我在编译boost库时遇到的两个典型的问题,在这里给大家分享一下。在研究boost的道路上,希望大家共同进步。

0 0
原创粉丝点击