《gcc五分鐘系列》第十七節:庫的使用(一):使用

gcc五分鐘系列

第十七節:庫的使用(一):使用

c與zip

半年以前的事情了。 有一次,我在一個C項目中需要讀寫zip壓縮包文件。很幸運地,我發現了libzip庫。[http://packages.debian.org/squeeze/libzip-dev] 然後,一切問題就都解決了。 咋解決的?聽我慢慢道來。

編程中,有一件很神奇的事情,叫做 複用 。通常,我們將一個功能封裝在一個函數中,目的是爲了以後遇見相同功能的時候,不需要把這個函數再寫一遍。 可是,函數級別的複用有時候會顯得力不從心。因此,出現了  技術。 庫的優點有很多,例如:

  • 它是編譯好的二進制文件,體積小,不需要用戶自己編譯。
  • 發佈簡單。使用方便。

通常,庫根據鏈接方式的不同,分爲兩種:靜態鏈接和動態鏈接。這裏我們先介紹動態鏈接的方法。

使用libzip

我寫了一個簡單的程序,zipdemo,它的目的是輸出一個zip包裏的文件列表。 使用libzip,一共分爲三步。

安裝libzip。

sudo apt-get install libzip-dev 

這裏需要注意一下,軟件包libzip包含的是運行時庫,而我們需要的是開發庫,也就是libzip-dev。

編寫源代碼,使用libzip中的函數。

首先要包含頭文件。
#include <zip.h> 
使用libzip中的函數。

函數的列表及每個函數的詳細介紹可以在libzip的man手冊中找到。

編譯鏈接。

由於zip.h頭文件是放在/usr/include下的,因此不需要顯式地指定include目錄。編譯的步驟沒有任何區別。
gcc -c -o zipdemo.o zipdemo.c 
鏈接時,需要指定鏈接的動態庫的名字。這裏我們使用-l參數。
gcc -lzip -o zipdemo zipdemo.o 

zipdemo源代碼及Makefile可以參見本項目git倉庫。

本節完

附1.從本節起,本系列改用markdown語法,使用github.com的markdown解釋器。 本項目的github.com地址爲:[https://github.com/lexdene/gcc_five_minute]。 本項目的51cto.com專題地址爲:[http://blog.51cto.com/zt/229]

附2.其實 debian 的軟件倉庫裏面基本上已經涵蓋了我們需要的各類編程庫,尤其以C庫居多。 每次當我需要某功能的時候,我都會先在 debian 的軟件倉庫中搜索一下,有沒有已經提供的庫。 搜索地址:[http://www.debian.org/distrib/packages]

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