2013-02-22 52 views
0

我想在我的C++程序中使用libzip從zip壓縮文件中提取文件。所以首先,我得到其中的文件數量,獲取他們的名字並閱讀它們。爲了獲得文件的數量,我使用'zip_get_num_entries'。它的原型是:編譯器在Windows上找不到對zip_get_num_entries的引用

zip_uint64_t zip_get_num_entries(struct zip *, int) 

而且我的方式使用此功能:

int nbrEntries(0); 
zip *archive = zip_open("myZip.zip", 0, 0); 
nbrEntries = zip_get_num_entries(archive, 0); 

當我寫了這個代碼,代碼:: Blocks的建議我zip_get_num_entries,所以沒有頭的問題。但是,當我編譯,編譯器(MinGW的)告訴我:

undefined reference to `_imp__zip_get_num_entries' 

所以,我想它的過時的等效,zip_get_num_files和它的工作。我將其包含到我用CMake製作的項目libzip.dll.a中。我有兩個文件:libzip.dll和libzip.dll.a。

我確定這是一個庫問題(請注意,我在MacOS上沒有這個問題),但我不知道如何解決這個問題。謝謝!

編輯:我搜索了他們的網站,並且讀到zip_get_num_files的實現是新的,當他們發佈網站上提供的庫時。所以我搜索了他們的Mercurial回購軟件,發現了兩天前發佈的版本(比網站上發佈的版本要近1年)。我用CMake構建它,它工作正常!

回答

0

「未定義的引用」意味着沒有可用函數的定義/實現(而不是聲明/原型)。你忘了鏈接這個庫。由於您使用MinGW和g++,因此在命令行上或LDFLAGS的部分內容將採用類似-lzip的內容。

您也有可能錯誤地配置了某些東西 - 在這種情況下,符號名稱可能因定義而異。但最有可能的情況是你忘了鏈接依賴關係。

+0

我在項目編譯選項菜單「編譯器設置」>「其他選項」中添加了-lzip,但總是有相同的消息: - /我可能配置了什麼錯誤? – Tiwenty 2013-02-22 12:02:26

+0

哦,我成功地編譯了我的程序!我從他們的Mercurial repo下載了一個更新的版本,它工作! http://hg.nih.at/libzip/rev/3bf116d0b3e9 – Tiwenty 2013-02-22 12:29:22

0

我終於成功使用zip_get_num_entries!我搜查了他們的網站,發現zip_get_num_files的實現在他們發佈網站上的圖書館時是新的。所以我搜索了他們的Mercurial回購軟件,發現了兩天前發佈的版本(比網站上發佈的版本要近1年)。我用CMake構建它,它工作正常!

相關問題