Linux、window下編譯quazip和測試

一、quazip簡介

QuaZip是用C++、Qt對Zlib進行封裝,用於壓縮和解壓文件的庫,下載地址,但是這個小工具是基於zlib這個小軟件的,而且由於開源界的一些協議,所以我們需要另外自己先得到這個庫

二、linux編譯方法

具體細節見quazip的官方文檔

1、quazip編譯與配置

(1)首先安裝zlib

我的環境是:manjaro deepin 17.1.12

因爲Quazip是基於zlib的,所以我們需要先安裝一下這個小軟件

manjaro系統安裝方式:
$ pacman -S zlib

ubuntu系統安裝方式:
$ sudo apt-get install zlib

(2)複製頭文件和動態庫文件

安裝完zlib後輸入命令

$ whereis zlib
可以找到zlib.h頭文件

$ locate libz.so
可以找到libz.so動態庫文件,這裏需要注意這裏的庫文件名字是lib開頭,因爲這個小軟件的名字其實就是 z

將這兩個文件複製出來放到quazip這項目下,可以用QTCreator打開,當然可以用下面方式編譯

(3)編譯

按照官方文檔裏面的命令編譯

$ cd /你的文件路徑/quazip-x.y.z/quazip
$ qmake
$ make          #編譯

$ qmake LIBS+=-L/剛剛你複製libz.so庫文件的路徑 INCLUDEPATH+=/剛剛你複製zlib.h頭文件的路徑

$ make install  #安裝

    #測試
$ cd /你的文件路徑/quazip-x.y.z/qztest
$ qmake
$ make
$ ./qztest

2、測試

(1)開一個QT控制檯小項目
main.cpp內容如下

#include <QCoreApplication>
#include "include/JlCompress.h"
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    //壓縮文件方法,注意參數文件後綴
    if(false==JlCompress::compressDir("/home/cvter/桌面/main.zip","/home/cvter/桌面/abc"))
        qDebug()<<"compress failed";
    else
        qDebug()<<"compress successed";

//這個不會用,需要自行查文檔
//    if(false == JlCompress::extractFile() 
//        qDebug()<<"compress failed";
//    else
//        qDebug()<<"compress successed";
    return a.exec();
}

(2)在這個項目裏面開兩個文件夾include  lib
把quazip裏面的頭文件複製到include中
以及他的幾個庫文件複製到lib文件中
然後在qt裏面點擊添加現有文件添加好頭文件
點擊添加庫添加linux的外部庫,然後就可以運行了

3、遇見問題和學習到的命令

(1)項目無法打開庫文件

利用ldd查看文件是不是動態鏈接庫,你可以測試你想測試的,假如qtCreator編譯完成後的可執行文件,可以測試他有沒有鏈接成功

動態裝入器找到共享庫要依靠兩個文件 — /etc/ld.so.conf 和 /etc/ld.so.cache。如果您對 /etc/ld.so.conf 文件進行 vim 操作,您可能會看到一個與下面類似的清單:(我們需要添加我們的動態庫路徑進去)

  $ vim /etc/ld.so.conf

  /usr/.../lib
  /usr/lib/mozilla
  /usr/lib/.../lib

ld.so.conf 文件包含一個所有目錄(/lib 和 /usr/lib 除外,它們會自動包含在其中)的清單,動態裝入器將在其中查找共享庫。

  ld.so.cache

但是在動態裝入器能“看到”這一信息之前,必須將它轉換到 ld.so.cache 文件中。可以通過運行 ldconfig 命令做到這一點:

  # sudo ldconfig

當 ldconfig 操作結束時,您會有一個最新的 /etc/ld.so.cache 文件,它反映您對 /etc/ld.so.conf 所做的更改。從這一刻起,動態裝入器在尋找共享庫時會查看您在 /etc/ld.so.conf 中指定的所有新目錄

(2)學習到命令

$ ldd       查看某文件是不是動態鏈接庫
$ file      識別文件類型,辨別一些文件的編碼格式
$ whereis   查找文件
$ locate    查找文件
$ export    見下面

(3)ldconfig 技巧

要查看 ldconfig 可以“看到”的所有共享庫,請輸入:

  # ldconfig -p | less

還有另一個方便的技巧可以用來配置共享庫路徑。有時候您希望告訴動態裝入器在嘗試任何 /etc/ld.so.conf 路徑以前先嚐試使用特定目錄中的共享庫。在您運行的較舊的應用程序不能與當前安裝的庫版本一起工作的情況下,這會比較方便。

  LD_LIBRARY_PATH

要指示動態裝入器首先檢查某個目錄,請將 LD_LIBRARY_PATH 變量設置成您希望搜索的目錄。多個路徑之間用冒號分隔;例如:

  # export LD_LIBRARY_PATH="/usr/lib/old:/opt/lib"

導出 LD_LIBRARY_PATH 後,如有可能,所有從當前 shell 啓動的可執行程序都將使用 /usr/lib/old 或 /opt/lib 中的庫,如果仍不能滿足一些共享庫相關性要求,則轉回到 /etc/ld.so.conf 中指定的庫。

三、windows編譯方法

1、下載zlib,利用WinRAR解壓出來

在這裏插入圖片描述

2、利用VS來編譯,進入下面終端

在這裏插入圖片描述

3、開始編譯nmake -f win32/Makefile.msc

在這裏插入圖片描述
在當前解壓文件夾的根目錄下就多了一些文件,裏面有我們需要的文件
在這裏插入圖片描述
另外有不需要的編譯的方法,貌似在安裝VS後,MSVC編譯器會自帶庫
在這裏插入圖片描述
然後處理方式和Linux上一樣了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章