在gcc3.0中使用stlport
在gcc3.0中使用stlport
gcc3.0推出后,向standard c++迈出了一大步,不过也付出了不少代价,很多老的c++的程序和class特别是涉及模板和io流无法在gcc3下编译了。比如连stlport也不行了。包括最新的4.5b7。在stlport.org上溜达了一圈,有人给出了一个非正式的解决方案。我把步骤译成中文,有兴趣可以看一下。
1) src/c_locale.c,注释掉 #include "stlport_prefix.h" 这句
2) 复制gcc.mak 为 gcc3.mak;去掉CXX 和 DYN_LINK 中的 -pthreads -nostdinc++ ;去掉 WARNING_FLAGS 中的 -ftemplate-depth-32
3) 在 stlport/config 目录下添加stl_gcc3.h文件,有如下内容:
# define _STLP_UINT32_T unsigned int
# define _STLP_RAND48 1
# define _STLP_BASE_MATCH_BUG 1
# define _STLP_LONG_LONG long long
# define _STLP_BROKEN_USING_DIRECTIVE 1
# define _STLP_NO_WCHAR_T
# define _STLP_NO_CSTD_FUNCTION_IMPORTS
4) 修改stlport/config/stlcomp.h文件,添加如下内容:
#if (__GNUC__ == 3)
# include <config/stl_gcc3.h>
#endif
5) 修改 stlport/stl/_config.h,修改如下
# ifdef _STLP_DEBUG
# define _STLP_STD stdD
# else
# define _STLP_STD std
改成
# ifdef _STLP_DEBUG
# define _STLP_STD std
# else
# define _STLP_STD std
(在530行左右)
6) stlport/stl/_site_config.h中添加如下定义:
# define _STLP_NATIVE_CPP_C_INCLUDE_PATH g++-v3
# define _STLP_NATIVE_CPP_RUNTIME_INCLUDE_PATH _STLP_NATIVE_CPP_C_INCLUDE_PATH
7)用gcc3.mak进行编译,一切ok ,我用的版本是stlport4.5b7.
最后说明一点,如前所说,因gcc3不能编译很多老的库,因此用来进行商业开发还需谨慎。众多的class都会针对gcc3进行修改,可能还需要一段时间。但如果用来学习standard c++或是开发全新的应用,无需维护老代码,gcc3还是很合适的。