把zlib的源代碼解壓到主機。
./configure
make
(我並不想安裝到主機裏,所以我沒有運行make install, 我想直接使用zlib的源碼在應用程序裏。)
會在目錄下生成庫文件。如下圖:
重點看libz.a libz.so libz.so.1 libz.so.1.2.11其實有2個文件都是鏈接文件,
libz.a 靜態鏈接庫
libz.so 動態鏈接庫
把編譯好的庫文件libz.a libz.so 拷貝到./lib下, 編譯的過程中使用 -L ./lib -lz 就可以了,
-lz 的意思就是使用- libz.so 或者libz.a 庫, 反正我目錄下都有,管它使用哪個呢。(-l(ib)z.a 真令人費解,想了好久才悟到!)
順利完成鏈接過程,生成可執行文件。
但在使用過程中,當調用 ret = compress(dat_dst, &len_dst, dat_src, len_src);
一般出現-5錯誤,經查是
#define Z_BUF_ERROR (-5)
經過百度確認是第二個參數的問題。第二個參數&len_dst雖然是個地址,理論上保存的壓縮後的數據長度, 但是也需要給這個變量賦初值的,這個初值就是dat_dst緩衝區的大小,如果不賦值的話,len_dst=0, 就會報 Z_BUF_ERROR的錯誤,
賦值之後,完美解決。
這個過程學會了,靜態庫,動態庫的使用,由於對linux編程不熟悉,走了很多彎路,記錄一下自己解決的過程。