Как собрать библиотеку libzip?

У меня возникают проблемы при попытке собрать его на Windows 10 x64.

Моя среда

MingGW 3.20
CMake 3.3.0

libzip-1.0.1

Что я сделал, так это загрузил проект на сайт libzip, открыл в CLion IDE (последняя версия) и попробовал компилировать.

Весь процесс сборки с ошибками можно посмотреть по ссылке. http://pastebin.com/KTPtm5z3

Ряд необъявленных переменных отображается как ошибка:

error: 'EOPNOTSUPP' undeclared (first use in this function)

Что вызывает эту проблему и почему?

Я могу без проблем скомпилировать версию библиотеки libzip в этом репозитории зеркальный репозиторий libzip v0.9, но я хочу до последней версии libzip.


person alex    schedule 20.08.2015    source источник


Ответы (2)


Разработчики libzip были проинформированы об этом вопросе, но, похоже, не могут найти правильное решение, поскольку ни один из них не очень хорошо знаком с Windows или MinGW: http://nih.at/listarchive/libzip-discuss/msg00559.html

Я не знаком ни с одним из них, но недавно смог успешно скомпилировать libzip в Windows 7 (без MinGW), используя этот ответ (также см. мой комментарий к этому ответу): https://stackoverflow.com/a/30245321/784669

Наконец, поскольку вы можете захотеть запустить все прямо сейчас, попробуйте сделать следующее:

  • ваш вызов swprintf в lib/zip_source_win32w.c, строка 36, попробуйте просто удалить второй аргумент функции len, так как ваш компилятор, похоже, предполагает более старую версию swprintf
  • поместите следующий код в качестве временной реализации для GetFileSizeEx (кредит: https://sourceforge.net/p/tdm-gcc/bugs/250/):

_

bool GetFileSizeEx(HANDLE hFile, PLARGE_INTEGER fsize){
    LPDWORD tSize;
    DWORD t = fsize->HighPart;
    *tSize = t;
    int ret = GetFileSize(hFile, tSize);
    fsize->HighPart = *tSize;
    delete tSize;
    return ret;
}
  • и вот еще одно предложение для GetFileSizeEx из stackoverflow: https://stackoverflow.com/a/28028376/784669 Итак, проблема может быть ваша версия Windows. Действительно, в winbase.h сказано определять GetFileSizeEx только в том случае, если _WIN32_WINNT >= 0x0500. Возможно, ваша версия Windows устарела или вам нужно:

_

#define _WIN32_WINNT 0x0500

Удачи!

person josch    schedule 21.08.2015
comment
Это #define _WIN32_WINNT 0x0500 решает ошибку с функцией GetFileSizeEx. - person alex; 22.08.2015
comment
Заменив swprintf на snwprintf, вы также устранили ошибку, возникающую во время выполнения. - person alex; 22.08.2015