MinGW下使用STLPort5.2.1
用STLPort替代MinGW下的stl实现,解决MinGW的宽字符问题。
MinGW编译STLPort:
下载STLPort5.2.1,解压到本地目录,编译过程如下:
bash-3.1$ pwd
/z/STLport-5.2.1/build/lib
bash-3.1$ mingw32-make.exe -fgcc.mak clean release-static install
此命令编译static库
如果编译动态库使用命令
mingw32-make.exe -fgcc.mak clean release-shared install
但动态库目前用最新的gcc编译会出问题,用3.5的MinGW则可以顺利编译。
注意make需要使用MinGW所带的make,而不是msys的make,这点在STLPort文档中被强调过。
生成的so文件放到lib路径下,拷贝stlport文件夹作为STLPort的头文件文件夹。
?
使用STLPort库链接生成执行文件:
使用静态库:
E:\workspace\c++\project\STLPortTest>g++ -nodefaultlibs -mthreads -g -IE:\workspace\c++\STLPort5.2.1\stlport STLPortTest.cpp -LE:\workspace\c++\STLPort5.2.1\lib\so\ -lstlport -lsupc++ -lgcc_s -lgcc -lmingw32 -lmingwex -lmsvcrt -lm -lmoldname -lcoldname -lkernel32 -D_STLP_USE_STATIC_LIB
使用动态库:
E:\workspace\c++\project\STLPortTest>g++ -nodefaultlibs -mthreads -g -IE:\workspace\c++\STLPort5.2.1\stlport STLPortTest.cpp -LE:\workspace\c++\STLPort5.2.1\lib\so\ -lstlport.5.2.dll -lsupc++ -lgcc_s -lgcc -lmingw32 -lmingwex -lmsvcrt -lm -lmoldname -lcoldname -lkernel32
先编译生成obj,然后链接生成exe:
E:\workspace\c++\project\STLPortTest>g++ -c -mthreads -D_STLP_USE_STATIC_LIB -IE:\workspace\c++\STLPort5.2.1\stlport STLPortTest.cpp
E:\workspace\c++\project\STLPortTest>g++ -nodefaultlibs -o "STLPortTest.exe" STLPortTest.o -LE:\workspace\c++\STLPort5.2.1\lib\so\ -lstlport -lsupc++ -lgcc_s -lgcc -lmingw32 -lmingwex -lmsvcrt -lm -lmoldname -lcoldname -lkernel32
?
需要注意的地方:
-mthreads -D_STLP_USE_STATIC_LIB -IE:\workspace\c++\STLPort5.2.1\stlport 这些参数应该放在编译期,更准确说法应该是预处理阶段。