`
ppgunjack
  • 浏览: 80274 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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 这些参数应该放在编译期,更准确说法应该是预处理阶段。
    -mthreads会改变导入的include文件内容,具体可以通过gcc -E查看预编译处理后的文件。
  • -nodefaultlibs必须放在链接期,并且对MinGW编译STLPort程序是必要的,阻止链接gcc提供的默认库。
  • 命令行中-I、代码文件顺序,各个库文件的顺序不能出错。.o文件顺序可以随意放,但是所依赖的库必须放在.o文件之后,且库和库的依赖顺序也必须确定,即A库所依赖的B库必须放在命令行中放在A库后面(右面)。
  • -lgcc是STLPort漏掉的参数,必须要。
  • -mthreads是必须要的参数,因为STLPort库编译时也是用多线程编译。
    加入-mthreads,则调用的文件预处理后,stl函数位于namespace stlp_std{},否则位于namespace stlpmtx_std {},因此若编译未加-mthreads,则链接STLPort库会报异常:
    STLPortTest.o:STLPortTest.cpp:(.text+0x19): undefined reference to `stlpmtx_std::cout'
    STLPortTest.o:STLPortTest.cpp:(.text$_ZN11stlpmtx_std8ios_base23_M_check_exception_maskEv[stlpmtx_std::ios_base::_M_check_exception_mask()]+
    0x1f): undefined reference to `stlpmtx_std::ios_base::_M_throw_failure()'。
  • 使用静态STLPort库时候需要-D_STLP_USE_STATIC_LIB定义_STLP_USE_STATIC_LIB宏。
分享到:
评论

相关推荐

    STLport-5.2.1已编译版

    这是STLport的v5.2.1,已用MinGw编译,包含头文件(stlport)3个动态库和3个静态库

    Qt5.2.1_windows_x86_mingw48

    最近要降级使用5.2.1的Qt安装程序,发现官网高版本的下载还方便,低版本的都使用集合的方式下载,感觉很不方便,废了好大劲才找到,分享给大家,仍然需要低版本Qt的可以来取。

    MinGW的使用指南

    MinGW的使用指南 MinGW pdf 使用指南

    MinGW使用MinGW使用

    MinGW使用MinGW使用

    MinGW下使用的VTK库

    使用CMake编译的VTK5.10.0,可在MinGW编译器下使用,非常的方便

    minGW使用指南(中文版)

    minGW使用指南minGW使用指南minGW使用指南minGW使用指南minGW使用指南

    MinGW的使用指南.pdf

    MinGW的使用指南.pdf

    QtCreator+minGW+OpenGL第三方库freeglut

    QtCreator开发环境下(minGW编译器),进行OpenGL编程时使用的第三方库,使用时只需将压缩包内文件夹内容复制到Qt安装目录下的minGW目录下的对应文件夹内,如:D:\Qt5.4\5.4\mingw491_32\bin;并在新建工程的.pro...

    mingw下使用的boost库

    mingw可用的boost库 解压需要winrar和7zip 需要的空间较大 具体参看 http://blog.csdn.net/cust_hf/article/details/17311521

    C语言编译器MINGW的使用

    这是mingw编译器的使用说明,方便大家查阅

    MinGw + 使用帮助

    MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时库。 实际上 MinGW 并不是一个 单纯的C/C++ 编译器,而是一套 GNU 工具集合。除...

    从dll生成mingw下的.a工具

    从dll生成mingw下的.a文件从dll生成mingw下的.a文件从dll生成mingw下的.a文件从dll生成mingw下的.a文件从dll生成mingw下的.a文件

    libevent-2.0.22-stable在windows环境下使用mingw编译

    libevent-2.0.22-stable在windows环境下使用mingw编译

    MinGW (gcc9.2.0-2) 解压即可使用

    MinGW\var\cache\mingw-get\packages 这个目录下有MinGW Installation Manager下载的安装包,gcc-ada-9.2.0-2-mingw32-bin.tar.xz、gcc-c++-9.2.0-2-mingw32-bin.tar.xz、gcc-core-9.2.0-2-mingw32-bin.tar.xz、gcc-...

    使用mingw编译后的zlib-1.2.5安装包

    使用mingw4.9.2编译后的zlib-1.2.5,包含头文件和.a文件

    MinGW 环境下 使用 Qt 编译 FFMPEG

    MinGW 环境下 使用 Qt 编译 FFMPEG

    insight 6.6 源码,mingw下可编译

    insight 6.6 源码,mingw下可编译

    GCC编译器mingw版本v10.0.0

    而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。一句话来概括:MinGW 就是 GCC 的 Windows 版本 。 MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成32位可执行程序,而 MinGW-w64 则可以编译生成 ...

    MinGW5.1.4

    MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist...它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。

    mingw环境下qt连接mysql详细教程,包括所需文件

    压缩包里包含qt的online安装包,“mysql connector c(32位,因为qt mingw的版本是32位)” mingw32重新编译后的qsqlmysql.dll和qsqlmysqld.dll,应该可以直接放到目录下使用。以及一个介绍qt安装及重新编译libmysql...

Global site tag (gtag.js) - Google Analytics