历经了两天,终于把boost编译成功了,其中是碰到各种问题,好在都能从网上找到解决办法,并顺利解决。在这里我就不说具体的编译步骤了,网上或者帮助文档中都有详细讲解,这里只说说我遇到的问题及解决办法。
下面说说问题。
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的道路上,希望大家共同进步。