`
ppgunjack
  • 浏览: 81192 次
  • 性别: 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已编译版

    MinGW(Minimalist GNU for Windows)是GCC(GNU Compiler Collection)的一个移植版本,它允许在Windows环境下使用GCC进行C和C++编程。STLport与MinGW的结合,为开发者提供了一个跨平台的STL实现,使得在Windows...

    QT-in-windows.zip_HTTP_QT5_Qt http下载文件_Qt5.2.1_qt http

    下载文件:qt-opensource-windows-x86-mingw48_opengl-5.2.1.exe并安装D:\Qt\Qt5.2.1 这个版本一般已经包含工具qt-creator和mingw32-make 若不含有,可以去下载IDE : ----打开网页:...

    Qt5.2.1_windows_x86_mingw48

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

    mingw下使用的boost库

    标题 "mingw下使用的boost库" 提到的是在MinGW环境下使用Boost库这一主题。Boost是一个流行的开源C++库集合,包含了许多实用的工具、算法和数据结构,它旨在提升C++的标准库功能并支持跨平台开发。在MinGW...

    MinGW下使用的VTK库

    在MinGW环境下使用VTK库,可以为Windows平台上的开发工作提供一个轻量级且高效的解决方案。 首先,我们要理解MinGW(Minimalist GNU for Windows)是一个为Windows操作系统提供了GNU工具集的开源项目。它包含了GCC...

    MinGW的使用指南

    本指南将详细介绍MinGW的安装、配置以及如何使用GCC进行编程。 一、MinGW安装 1. 下载:首先,你需要访问MinGW官方网站下载最新的安装程序。MinGW通常包含一个名为mingw-get的包管理器,用于安装和管理所需的组件。...

    QTMinGw下已经编译好的gdal库

    要在Qt MinGW环境下使用预编译的GDAL库,你需要完成以下步骤: 1. **安装Qt MinGW**:确保你已经安装了适合的Qt版本,且是基于MinGW的编译器。可以通过Qt官网下载相应版本的Qt SDK,选择MinGW编译器选项。 2. **...

    MinGW的使用指南.pdf

    3. **msvcrt**:MinGW使用了微软的C运行时库(msvcrt.dll),使得程序可以调用Windows API函数。 4. **binutils**:包括链接器、汇编器等工具,用于处理编译过程中的中间步骤。 **安装MinGW:** 1. 下载MinGW安装...

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

    标题"libevent-2.0.22-stable在windows环境下使用mingw编译"指的是一个关于使用MinGW编译工具在Windows操作系统上构建libevent库的2.0.22稳定版本的过程。libevent是一个开源的、跨平台的事件通知库,它提供了一种...

    C语言编译器MINGW的使用

    **MINGW(Minimalist GNU for Windows)**是GNU工具链的一个变体,专为Microsoft Windows设计,提供了包括GCC在内的多个工具,用于在Windows环境下编译和运行C、C++等语言的程序。MINGW不仅简化了开发流程,还极大地...

    QtCreator+minGW+OpenGL第三方库freeglut

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

    minGW-64位安装包,解压后可以直接安装和使用

    MinGW (Minimalist GNU for Windows) 是一个开源项目,它为Windows操作系统提供了GCC(GNU Compiler Collection)和其他GNU工具集,使得开发者能够在Windows环境下编写和编译C、C++、Fortran等语言的程序。...

    MinGw + 使用帮助

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

    opencv-3.4.5-mingw-32位(window下用MINGW编译32位的opencv)

    《OpenCV 3.4.5在Windows下使用MINGW编译32位版本详解》 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它包含了大量的图像处理和计算机视觉的算法,广泛应用于图像分析、机器学习等...

    MinGW mingw64压缩包

    4. MinGW-w64 使用 Windows 的C语言运行库,因此编译出的程序不需要第三方 DLL ,可以直接在 Windows 下运行。 5. 那些著名的开源 IDE 实际只是将 MinGW-w64 封装了起来,使它拥有友好的图形化界面,简化了操作,但...

    从dll生成mingw下的.a工具

    总的来说,从DLL转换为MinGW下的.a文件涉及对Windows动态链接库的理解、使用`pexports`和`dlltool`工具,以及对编译链接过程的掌握。通过这个过程,你可以确保程序在运行时不再依赖外部的DLL,使得部署更加简单。

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

    MinGW是GCC(GNU Compiler Collection)在Windows上的一个移植版本,它提供了与Linux环境下类似的开发工具集,包括C、C++、Fortran等语言的编译器。MinGW4.9.2是该编译器的一个较旧但稳定版本,对于不追求最新特性的...

    MinGw 包 直接解压到C盘即可使用

    标题“MinGW 包 直接解压到C盘即可使用”表明这是一个关于MinGW安装过程的说明。在Windows系统中,将MinGW压缩包解压到C盘通常是出于方便和快速设置的目的,因为C盘通常是系统默认的程序安装位置,且易于访问。一旦...

    mingw64离线包下载直接使用

    MingW64的主要作用是允许开发者在Windows环境下使用GCC进行C、C++以及其他GNU工具链支持的语言的编译和开发工作。此离线包“mingw64”包含了必要的编译器和其他工具,使得用户无需在线安装,可以直接下载后使用。 ...

Global site tag (gtag.js) - Google Analytics