首先下载最新版本的STLport, 目前最新的版本号是5.2.1,更新日期为2013年5月,从官网上的介绍来看,貌似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
这样,这个编译错误就能够解决。