windows环境下mingw qt编译一些常见C++库(boost、zlib、libircclient)
Posted on 2020-03-12 16:40 谢*勇 阅读(993) 评论(0) 编辑 收藏 举报一、boost库
1、下载boost源码并解压,比如:https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.zip
2、打开QT命令行工具,必须关键,如:Qt 5.8 for Desktop (MinGW 5.3.0 32 bit)
3、在命令行进入boost的目录\tools\build\src\engine,执行build gcc,在当前目录将会生成bin.ntx86文件夹,里面包含两个exe文件b2.exe,bjam.exe
4、把该b2.exe,bjam.exe拷贝到boost根目录,比如:D:\boost_1_72_0
5、在命令行中改变目录到boost根目录,比如:D:\boost_1_72_0,运行:b2 --toolset=gcc address-model=32 --prefix=D:\boost_1_72_0\mingwlib32 install,然后就会在D:\boost_1_72_0\mingwlib32下生成头文件和库文件。
6、加zlib库(默认在windows 下是没有 zlib 支持,而且boost iostreams 中使用了zlib ,所以需要下载 zlib 的源码,增加对 zlib 的支持),需要添加-sZLIB_SOURCE和-sZLIB_INCLUDE,如下:
b2 --toolset=gcc address-model=32 -sZLIB_SOURCE="D:\MinGW\msys\1.0\home\zlib-1.2.11" -sZLIB_INCLUDE="D:\MinGW\msys\1.0\home\zlib-1.2.11" --build-type=complete --prefix=D:\boost_1_59_0\lib32 install
二、zlib
1、下载zlib源码并解压,比如:https://www.zlib.net/zlib-1.2.11.tar.gz
2、有两种方法
a方法:
a-1、打开QT命令行工具,如:Qt 5.8 for Desktop (MinGW 5.3.0 32 bit).
a-2、复制该win32下makefile.gcc到根目录,在QT命令行进入zlib的目录
a-3、执行mingw32-make -f makefile.gcc
a-4、手工拷贝头文件和库文件( make install不行)
b方法(系统必须安装了mingw,比如:D:\MinGW):
b-1、用rem注释D:\MinGW\msys\1.0\msys.bat的第一行,如:rem call "D:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat",目的是让gcc编译,而不是msvc编译
b-2、复制源码到msys\1.0\home下如msys\1.0\home\zlib-1.2.11,复制该win32下makefile.gcc到根目录,并去掉.gcc文件后缀
b-3、执行D:\MinGW\msys\1.0\msys.bat,打开msys命令行工具,输入pwd显示当前目录
b-4、在msys命令行中进入zlib目录,make
b-5、如果顺利,make install 后,可以在msys\1.0\local找到编译成功的.a文件
三、libircclient库
系统必须安装了mingw,比如:D:\MinGW):
1、用rem注释D:\MinGW\msys\1.0\msys.bat的第一行,如:rem call "D:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat",目的是让gcc编译,而不是msvc编译
2、复制源码到msys\1.0\home下如msys\1.0\home\libircclient。
3、执行D:\MinGW\msys\1.0\msys.bat,打开msys命令行工具,输入pwd显示当前目录
4、在msys命令行中进入libircclient目录,./configure ,在在其下src目录回生成一个makefile文件,进入src目录,执行 make ,如果顺利,可以在libircclient\src找到编译成功的.a文件
5、如果顺利,make install 后,可以在msys\1.0\local找到编译成功的.a文件(需要修改makefile,缺省的Makefile会生成静态库)
注意:如果编译链接过程中出现undefined reference to `ioctlsocket@12'类似错误,则打开Makefile文件在LIBS =中添加-lwsock32 -lws2_32
我在使用的过程中发现编译出来的libircclient.a文件在qt项目中使用会有重复定义的错误导致链接不成功。后来在qt中建立项目来编译,pro文件如下:
QT -= gui
TARGET = ircclient
TEMPLATE = lib
CONFIG += staticlib
DEFINES += QT_DEPRECATED_WARNINGS
INCLUDEPATH += ../src/libircclient/include
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
../src/libircclient/src/colors.c \
../src/libircclient/src/dcc.c \
../src/libircclient/src/errors.c \
../src/libircclient/src/libircclient.c \
../src/libircclient/src/portable.c \
../src/libircclient/src/sockets.c \
../src/libircclient/src/ssl.c \
../src/libircclient/src/utils.c
HEADERS += \
../src/libircclient/include/libirc_errors.h \
../src/libircclient/include/libirc_events.h \
../src/libircclient/include/libirc_options.h \
../src/libircclient/include/libirc_rfcnumeric.h \
../src/libircclient/include/libircclient.h \
../src/libircclient/src/config.h \
../src/libircclient/src/dcc.h \
../src/libircclient/src/params.h \
../src/libircclient/src/session.h
unix {
target.path = /usr/lib
INSTALLS += target
}