博客
关于我
MinGW 编译zlib、libpng、libjpeg等
阅读量:153 次
发布时间:2019-02-27

本文共 4074 字,大约阅读时间需要 13 分钟。

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

下载地址:

当前版本:1.0.11
一路安装下去即可

zlib

下载地址:

当前版本:1.2.8
命令行输入:

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

生成libz.a文件

libpng

下载地址:

当前版本: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

下载地址:

当前版本: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

下载地址:

当前版本: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

下载地址:

当前版本: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

下载地址:

当前版本: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

下载地址:

当前版本: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

下载地址:

当前版本: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

下载地址:

当前版本: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 

2.NDK在windows下编译libpng 
3.mingw_how_to 
4.compile libjpeg with mingw 
5.Using ld, the Gnu Linker 

转载地址:http://vuid.baihongyu.com/

你可能感兴趣的文章
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
mutiplemap 总结
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
Mysql Innodb 锁机制
查看>>