用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宏。
分享到:
相关推荐
MinGW(Minimalist GNU for Windows)是GCC(GNU Compiler Collection)的一个移植版本,它允许在Windows环境下使用GCC进行C和C++编程。STLport与MinGW的结合,为开发者提供了一个跨平台的STL实现,使得在Windows...
下载文件:qt-opensource-windows-x86-mingw48_opengl-5.2.1.exe并安装D:\Qt\Qt5.2.1 这个版本一般已经包含工具qt-creator和mingw32-make 若不含有,可以去下载IDE : ----打开网页:...
最近要降级使用5.2.1的Qt安装程序,发现官网高版本的下载还方便,低版本的都使用集合的方式下载,感觉很不方便,废了好大劲才找到,分享给大家,仍然需要低版本Qt的可以来取。
标题 "mingw下使用的boost库" 提到的是在MinGW环境下使用Boost库这一主题。Boost是一个流行的开源C++库集合,包含了许多实用的工具、算法和数据结构,它旨在提升C++的标准库功能并支持跨平台开发。在MinGW...
在MinGW环境下使用VTK库,可以为Windows平台上的开发工作提供一个轻量级且高效的解决方案。 首先,我们要理解MinGW(Minimalist GNU for Windows)是一个为Windows操作系统提供了GNU工具集的开源项目。它包含了GCC...
本指南将详细介绍MinGW的安装、配置以及如何使用GCC进行编程。 一、MinGW安装 1. 下载:首先,你需要访问MinGW官方网站下载最新的安装程序。MinGW通常包含一个名为mingw-get的包管理器,用于安装和管理所需的组件。...
要在Qt MinGW环境下使用预编译的GDAL库,你需要完成以下步骤: 1. **安装Qt MinGW**:确保你已经安装了适合的Qt版本,且是基于MinGW的编译器。可以通过Qt官网下载相应版本的Qt SDK,选择MinGW编译器选项。 2. **...
3. **msvcrt**:MinGW使用了微软的C运行时库(msvcrt.dll),使得程序可以调用Windows API函数。 4. **binutils**:包括链接器、汇编器等工具,用于处理编译过程中的中间步骤。 **安装MinGW:** 1. 下载MinGW安装...
标题"libevent-2.0.22-stable在windows环境下使用mingw编译"指的是一个关于使用MinGW编译工具在Windows操作系统上构建libevent库的2.0.22稳定版本的过程。libevent是一个开源的、跨平台的事件通知库,它提供了一种...
**MINGW(Minimalist GNU for Windows)**是GNU工具链的一个变体,专为Microsoft Windows设计,提供了包括GCC在内的多个工具,用于在Windows环境下编译和运行C、C++等语言的程序。MINGW不仅简化了开发流程,还极大地...
QtCreator开发环境下(minGW编译器),进行OpenGL编程时使用的第三方库,使用时只需将压缩包内文件夹内容复制到Qt安装目录下的minGW目录下的对应文件夹内,如:D:\Qt5.4\5.4\mingw491_32\bin;并在新建工程的.pro...
MinGW (Minimalist GNU for Windows) 是一个开源项目,它为Windows操作系统提供了GCC(GNU Compiler Collection)和其他GNU工具集,使得开发者能够在Windows环境下编写和编译C、C++、Fortran等语言的程序。...
MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时库。 实际上 MinGW 并不是一个 单纯的C/C++ 编译器,而是一套 GNU 工具集合。除...
《OpenCV 3.4.5在Windows下使用MINGW编译32位版本详解》 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它包含了大量的图像处理和计算机视觉的算法,广泛应用于图像分析、机器学习等...
4. MinGW-w64 使用 Windows 的C语言运行库,因此编译出的程序不需要第三方 DLL ,可以直接在 Windows 下运行。 5. 那些著名的开源 IDE 实际只是将 MinGW-w64 封装了起来,使它拥有友好的图形化界面,简化了操作,但...
总的来说,从DLL转换为MinGW下的.a文件涉及对Windows动态链接库的理解、使用`pexports`和`dlltool`工具,以及对编译链接过程的掌握。通过这个过程,你可以确保程序在运行时不再依赖外部的DLL,使得部署更加简单。
MinGW是GCC(GNU Compiler Collection)在Windows上的一个移植版本,它提供了与Linux环境下类似的开发工具集,包括C、C++、Fortran等语言的编译器。MinGW4.9.2是该编译器的一个较旧但稳定版本,对于不追求最新特性的...
标题“MinGW 包 直接解压到C盘即可使用”表明这是一个关于MinGW安装过程的说明。在Windows系统中,将MinGW压缩包解压到C盘通常是出于方便和快速设置的目的,因为C盘通常是系统默认的程序安装位置,且易于访问。一旦...
MingW64的主要作用是允许开发者在Windows环境下使用GCC进行C、C++以及其他GNU工具链支持的语言的编译和开发工作。此离线包“mingw64”包含了必要的编译器和其他工具,使得用户无需在线安装,可以直接下载后使用。 ...