关闭

MinGW 编译zlib、libpng、libjpeg等

标签: MinGW QT
16456人阅读 评论(3) 收藏 举报
分类:


MinGW

这里使用的是Qt5自带的MinGw版本,将路径D:\Qt\Qt5.1.0\Tools\mingw48_32\bin加到"环境变量"→"系统变量"→"Path"
命令行输入:

1
gcc -v

可看到gcc版本为:gcc version 4.8.0 (rev2, Built by MinGW-builds project)

MSYS

下载地址:http://www.mingw.org/wiki/MSYS
当前版本:1.0.11
一路安装下去即可

zlib

下载地址:http://www.zlib.net/
当前版本:1.2.8
命令行输入:

1
2
copy win32\makefile.gcc makefile.gcc
mingw32-make -f makefile.gcc

生成libz.a文件

libpng

下载地址:http://www.libpng.org/pub/png/libpng.html
当前版本:1.6.6
打开scripts/makefile.gcc设置zlib路径:

1
2
ZLIBINC = ../zlib-1.2.8
ZLIBLIB = ../zlib-1.2.8

拷贝scripts/pnglibconf.h.prebuilt到源码目录,改名为pnglibconf.h
命令行输入:

1
2
copy scripts\makefile.gcc makefile.gcc
mingw32-make -f makefile.gcc

生成libpng.a文件

libjpeg

下载地址:http://www.ijg.org/
当前版本:9
打开MSYS (rxvt),输入:

1
2
3
cd /f/mycode/mysvn/jpeg-9
./configure
make

若是出现以下错误:

1
2
jcapimin.c:127:1: error: conflicting types for 'jpeg_suppress_tables'
 jpeg_suppress_tables (j_compress_ptr cinfo, boolean suppress)

打开jconfig.h,增加以下定义:

1
#define HAVE_PROTOTYPES 1

重新输入:

1
make

在.libs文件夹下生成libjpeg.a文件

libtiff

下载地址:ftp://ftp.remotesensing.org/pub/libtiff
当前版本:4.0.3
编译依赖zlib和libjpeg,打jpeg-9/jconfig.h,定义如下:

1
2
#define HAVE_UNSIGNED_CHAR
#define HAVE_UNSIGNED_SHORT

打开MSYS (rxvt),输入:

1
./configure --with-zlib-include-dir=/f/mycode/mysvn/zlib-1.2.8 --with-zlib-lib-dir=/f/mycode/mysvn/zlib-1.2.8 --with-jpeg-include-dir=/f/mycode/mysvn/jpeg-9 --with-jpeg-lib-dir=/f/mycode/mysvn/jpeg-9/.libs

接着输入:

1
make

在libtiff/.libs文件夹下生成libtiff.a文件

libiconv

下载地址:http://www.gnu.org/software/libiconv/
当前版本:1.14
打开MSYS (rxvt),输入:

1
2
3
cd /f/mycode/mysvn/libiconv-1.14
./configure
make

在lib/.libs文件夹下生成libiconv-2.dll和libiconv.dll.a文件,这是动态库。

GLEW

下载地址:http://glew.sourceforge.net/
当前版本:1.10.0
打开Makefile,更改SYSTEM变量为:

1
SYSTEM ?= mingw

命令行输入:

1
mingw32-make -f Makefile

在lib文件夹生成libglew32.a、libglew32.dll.a和glew32.dll文件
MinGW使用-lxxx来链接库的时候,搜索库的顺序如下:

1
2
3
4
5
6
libxxx.dll.a 
xxx.dll.a 
libxxx.a 
cygxxx.dll (*) 
libxxx.dll 
xxx.dll

测试使用,新建Qt工程,pro内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
QT       += core
QT       -= gui

TARGET = testc11
CONFIG   += console
CONFIG   -= app_bundle
CONFIG   += c++11

TEMPLATE = app

# 链接GLEW静态库版本时开启
#DEFINES += GLEW_STATIC
INCLUDEPATH += E:/MyControl/glew-1.10.0/include
LIBS += -lglew32 -lopengl32 -LE:/MyControl/glew-1.10.0/lib

SOURCES += main.cpp

main.cpp内容如下:

1
2
3
4
5
6
7
8
9
#include "GL/glew.h"
#include <QCoreApplication>

int main(int argc, char *argv[])
{
    glewInit();
    QCoreApplication a(argc, argv);
    return a.exec();
}

编译运行成功,它链接的是libglew32.dll.a,运行需要glew32.dll动态库支持。接下来测试链接静态库,取消pro文件里面的注释,然后将E:\MyControl\glew-1.10.0\lib文件夹下的libglew32.dll.a文件暂时移出此文件夹,以防止被链接到。重新编译运行,此时链接到了静态库libglew32.a文件。

libwebp

下载地址:https://developers.google.com/speed/webp
当前版本:0.3.1
打开makefile.unix文件,注释掉以下四行,如下:

1
2
3
4
#EXTRA_FLAGS= -DWEBP_HAVE_PNG -DWEBP_HAVE_JPEG -DWEBP_HAVE_TIFF
#DWEBP_LIBS= -lpng -lz
#CWEBP_LIBS= $(DWEBP_LIBS) -ljpeg -ltiff
#GIF_LIBS = -lgif

命令行输入:

1
mingw32-make -f makefile.unix

在src文件夹下生成libwebp.a文件

libcurl

下载地址:http://curl.haxx.se/
当前版本:7.33.0
命令行输入:

1
mingw32-make mingw32

在lib文件夹下生成libcurl.a文件
测试静态库使用,新建Qt工程,pro内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
QT       += core
QT       -= gui

TARGET = testc11
CONFIG   += console
CONFIG   -= app_bundle
CONFIG   += c++11

TEMPLATE = app

DEFINES += CURL_STATICLIB
INCLUDEPATH += E:/MyControl/curl-7.33.0/include
LIBS += -LE:/MyControl/curl-7.33.0/lib -lcurl -lws2_32 -lwldap32

SOURCES += main.cpp

main.cpp内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "curl/curl.h"
#include <QCoreApplication>

int main(int argc, char *argv[])
{
    CURL *curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl) {
      curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
      /* example.com is redirected, so we tell libcurl to follow redirection */
      curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

      /* Perform the request, res will get the return code */
      res = curl_easy_perform(curl);
      /* Check for errors */
      if(res != CURLE_OK)
        fprintf(stderr, "curl_easy_perform() failed: %s\n",
                curl_easy_strerror(res));

      /* always cleanup */
      curl_easy_cleanup(curl);
    }

    QCoreApplication a(argc, argv);
    return a.exec();
}

编译运行,可见打印出了网页源码。

FreeType

下载地址:http://www.freetype.org
当前版本:2.5.0
打开MSYS (rxvt),输入:

1
2
3
cd /e/mycontrol/freetype-2.5.0
./configure --without-png
make

在objs\.libs文件夹下生成libfreetype.a文件


参考资料:

1.在 mingw 下编译 libHaru http://kingsz1.iteye.com/blog/543787
2.NDK在windows下编译libpng http://www.scottcgi.com/2012/12/31/ndk%E5%9C%A8windows%E4%B8%8B%E7%BC%96%E8%AF%91libpng/
3.mingw_how_to http://www.gaia-gis.it/spatialite-2.4.0/mingw_how_to.html
4.compile libjpeg with mingw http://stackoverflow.com/questions/13087749/compile-libjpeg-with-mingw
5.Using ld, the Gnu Linker https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/win32.html

3
0
查看评论

windows上编译zlib-1.2.8

MSVC编译   使用VS(x86)命令行工具进入到zlib根目录,执行 nmake -f win32/Makefile.msc ,在根目录下生成:zlib.lib(静态库)  zdll.lib(动态库的导入库)  zlib1.dll(动态库) 。必要的头文件有zli...
  • yuzeze
  • yuzeze
  • 2016-06-07 14:15
  • 3353

mingw编译zlib

zlib是提供资料压缩之用的函式库,此函式库为自由软件,由Jean-loup Gailly与Mark Adler所开发,zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。 1. 安装mingw5.1.4 2. 安装msys-1.0.10和msysDT...
  • zxxSsdsd
  • zxxSsdsd
  • 2013-08-01 11:33
  • 1209

MinGW 编译zlib、libpng、libjpeg等

MinGW 这里使用的是Qt5自带的MinGw版本,将路径D:\Qt\Qt5.1.0\Tools\mingw48_32\bin加到"环境变量"→"系统变量"→"Path" 命令行输入: 1 ...
  • akof1314
  • akof1314
  • 2013-11-30 00:41
  • 16456

MSYS2开发环境搭建

MSYS2+MinGW64开发环境搭建软件下载 下载MSYS2 64bit软件包msys2-x86_64-20150916.exe 下载MinGW64工具链,根据需要选择版本,x86_64-5.2.0-release-posix-seh-rt_v4-rev0.7z 软件安装步骤 双击安装msys2-...
  • callinglove
  • callinglove
  • 2015-09-20 20:45
  • 20862

如何在windows平台下编译比特币bitcoin客户端

很多朋友都知道如何在linux平台如何编译比特币程序,但是,到了windows平台,就会感觉到无从下手。其实,比特币程序是跨平台的。你要编译windows版的比特币程序,基本上有两种方法,一种是在linux平台(推荐ubuntu 13.10)通过交叉编译的方法来编译,另外一种就是直接在windo...
  • rion_chen
  • rion_chen
  • 2016-04-09 13:38
  • 6365

mingw&vc静态库lib

网上大多说的是 dll 怎么生成 .lib 什么的,这里是将mingw生成的.a文件拉出符号表文件.lib。 先用 ar 将 .a 中的所有 .o 文件解出来: ar x li...
  • u011191259
  • u011191259
  • 2015-10-29 16:54
  • 1393

Windows下MinGW编译ffmpeg库

主要编译步骤 1. 安装MinGW,推荐使用官网下载安装,然后设定默认路径,continue键进入包安装界面,未安装前所有方框标记都是空的,右键选择“mark for installation”即可(安装包并不都得安装,全装也没什么大碍,多花点时间安装而已。选择好安装包后点击菜单项Instal...
  • Alger_magic
  • Alger_magic
  • 2016-09-05 18:42
  • 492

手把手教你在Windows下使用MinGW编译libav

手把手教你在Windows下使用MinGW编译libav  libav是在Linux下使用纯c语言开发的,不可避免的,libav源码使用了一些gcc的特性,那么在Windows下很难使用VC编译,但是使用MinGW编译却简单多了,下面我将根据自己的经历逐步介绍使用MinGW编译libav...
  • wangpingfang
  • wangpingfang
  • 2012-10-31 17:58
  • 6783

如何在vc中使用mingw编译出来的动态库和静态库

mingw编译出来的静态库后缀名为.a,编译出来的动态库的导入库后缀名为.dll.a 因为在windows下用的.lib库可能是静态库也可能是动态库的导入库。而mingw编译出来的动态库的导入库可以直接在vc中直接使用,例如 #pragma comment(lib, "libx264.dl...
  • qiuchangyong
  • qiuchangyong
  • 2014-02-12 16:06
  • 7766

Qt下使用的静态链接库------ *.lib转化为mingw使用的.a格式的静态库

使用MinGW附带的工具reimp.exe,该工具一般在MinGW in目录下,其readme文档在MinGWdoc eimp目录下, 方法很简单,比如: C:CodeBlocksMinGWlibdx9>reimp d3d8.lib 就会生成一个“libd3d8.a”文件,这个文件就可以...
  • libaineu2004
  • libaineu2004
  • 2015-08-19 17:14
  • 4684
    个人资料
    • 访问:3555422次
    • 积分:36075
    • 等级:
    • 排名:第137名
    • 原创:402篇
    • 转载:88篇
    • 译文:5篇
    • 评论:3425条
    个人说明
    联系方式:
    文章存档
    最新评论