2013-02-22 3 views
0

Zip 아카이브에서 파일을 추출하려면 C++의 내 프로그램에서 libzip을 사용하고 싶습니다. 그래서 첫째로, 나는 그것에 파일의 수를 얻고, 그들의 이름을 얻고 그것을 읽습니다. 파일 수를 얻으려면 '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); 

은, 코드 :: 블록이 나에게 zip_get_num_entries 제안을, 그래서 헤더의 문제가 없습니다.

undefined reference to `_imp__zip_get_num_entries' 

그래서 나는 그것의 사용되지 않는 동등한, zip_get_num_files을 시도하고 일 : 내가 컴파일 할 때, 컴파일러 (는 MinGW)는 나에게 말했다. 나는 CMake로 만든 프로젝트 libzip.dll.a에 포함시켰다. libzip.dll과 libzip.dll.a라는 두 개의 파일이 있습니다.

저는 라이브러리 문제 (MacOS에서는이 문제가 없었 음을 확인했습니다)를 해결할 방법을 모르겠습니다. 고맙습니다!

편집 : 나는 그들의 웹 사이트를 검색하여 zip_get_num_files의 구현이 웹 사이트에서 사용할 수있는 라이브러리를 출시했을 때 새로운 것을 읽었습니다. 그래서 Mercurial repo에서 검색 한 결과 2 일 전에 릴리스 된 버전을 발견했습니다 (거의 1 년이되는 웹 사이트의 출시보다 조금 더 새 버전). CMake로 만들었고 효과가있었습니다!

답변

0

"정의되지 않은 참조"는 사용 가능한 함수의 정의/구현 (선언/프로토 타입과 반대)이 없음을 의미합니다. 당신은 링크를 잊어 버렸습니다. 라이브러리. g++으로 MinGW를 사용하기 때문에 명령 행에서 또는 LDFLAGS의 일부로 -lzip과 같은 형식을 취합니다.

무언가를 잘못 구성 할 수 있습니다.이 경우 기호 이름은 정의에 따라 다를 수 있습니다. 하지만 가장 가능성있는 경우는 종속성을 연결하는 것을 잊었다는 것입니다.

+0

내 프로젝트 빌드 옵션의 "컴파일러 설정"> "기타 옵션"메뉴에서 -lzip을 추가했지만 항상 같은 메시지가 있습니다 : -/내가 뭘 잘못 구성 했습니까? – Tiwenty

+0

오, 나는 내 프로그램을 컴파일하는 데 성공했다 !! 나는 그들의 Mercurial repo에서 최신 버전을 다운로드했고 효과가있었습니다! http://hg.nih.at/libzip/rev/3bf116d0b3e9 – Tiwenty

0

마침내 zip_get_num_entries를 사용하는 데 성공했습니다! 나는 그들의 웹 사이트를 검색하여 zip_get_num_files의 구현이 웹 사이트에서 사용 가능한 라이브러리를 발표 할 때 새로운 것을 읽었습니다. 그래서 Mercurial repo에서 검색 한 결과 2 일 전에 릴리스 된 버전을 발견했습니다 (거의 1 년이되는 웹 사이트의 출시보다 조금 더 새 버전). CMake로 만들었고 효과가있었습니다!

관련 문제