编译STLPort

首先下载最新版本的STLport, 目前最新的版本号是5.2.1,更新日期为2013年5月,从官网上的介绍来看,貌似STLport已经停止更新了(?)。

http://sourceforge.net/projects/stlport/

下载完成之后,将STLPort解压缩到任意路径下,通过visual studio的Command Prompt打开命令行,进入%STLPort%的根目录下,敲入

configure.bat msvc9

注意,由于STLPort已经很久没有更新了,因此,目前只支持到visual studio 2008。因此就只能用msvc9了。命令执行结束之后。进入build\lib、目录下,敲入

nmake clean install

开始编译。可惜好戏不长,一开始编译出错了。如下:

STLport-5.2.1\stlport\stl/cstdlib.h(158) : error C2084: function 'int64 abs(_int64)' already has a body

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

啊,是不是要吐血。没办法,打开_cstdlib.h,到157行 把

#else

修改成

#elif !defined(STLP_MSVC) || (STLP_MSVC < 1600)

修改完成之后,再次敲入nmake clean install。稍等片刻,编译成功。

另外,如果是在visual studio 2013中引用STLPort的话,肯定还会遇到下面这个问题:

stlport-5.2.1\stlport\stl_cmath.h(498): error C2084: function 'float hypot(float,float) throw()' already has a body
stlport-5.2.1\stlport\stl_cmath.h(499): error C2084: function 'long double hypot(long double,long double) throw()' already has a body

解决这个编译问题的方法和上面一样,在_cmake.h中,修改:

_STLP_MATH_INLINE2XX(float, hypot, hypot)
inline long double hypot(long double x, long double y) { return sqrt(x * x + y * y); }

改成

# if !defined(STLP_MSVC) || (STLP_MSVC < 1800)
_STLP_MATH_INLINE2XX(float, hypot, hypot)
inline long double hypot(long double x, long double y) { return sqrt(x * x + y * y); }
# endif

这样,这个编译错误就能够解决。

你可能感兴趣的:(编译STLPort)