MinGW 編譯zlib、libpng、libjpeg、libcurl等(全都是Qt項目)

MinGW

這裏使用的是Qt5自帶的MinGw版本,將路徑D:\Qt\Qt5.1.0\Tools\mingw48_32\bin加到"環境變量"→"系統變量"→"Path"
命令行輸入:html

1
 
gcc -v

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

MSYS

下載地址:http://www.mingw.org/wiki/MSYS
當前版本:1.0.11
一路安裝下去便可web

zlib

下載地址:http://www.zlib.net/
當前版本:1.2.8
命令行輸入:windows

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

生成libz.a文件api

libpng

下載地址:http://www.libpng.org/pub/png/libpng.html
當前版本:1.6.6
打開scripts/makefile.gcc設置zlib路徑:app

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

拷貝scripts/pnglibconf.h.prebuilt到源碼目錄,更名爲pnglibconf.h
命令行輸入:curl

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

生成libpng.a文件svn

libjpeg

下載地址:http://www.ijg.org/
當前版本:9
打開MSYS (rxvt),輸入:測試

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

如果出現如下錯誤:ui

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

 

http://blog.csdn.net/akof1314/article/details/17034887

相關文章
相關標籤/搜索