【问题标题】:How to build libzip library?如何构建 libzip 库?
【发布时间】:2015-08-20 18:05:48
【问题描述】:

我在尝试在 Windows 10 x64 上构建它时遇到问题。

我的环境是

MingGW 3.20
CMake 3.3.0

libzip-1.0.1

我所做的是下载libzip site中的项目,打开CLion IDE(最新版本)并尝试编译。

有错误的整个构建过程,可以在链接中找到。 http://pastebin.com/KTPtm5z3

一些未声明的变量显示为错误:

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

是什么导致了这个问题,为什么?

我可以在这个仓库mirror repo libzip v0.9编译库版本libzip没有任何问题,但我想要最新版本的libzip。

【问题讨论】:

    标签: build libzip


    【解决方案1】:

    libzip 开发人员已经意识到这个问题,但似乎很难找到正确的修复程序,因为他们都不太熟悉 Windows 或 MinGW:http://nih.at/listarchive/libzip-discuss/msg00559.html

    我自己都不熟悉,但最近能够使用此答案在 Windows 7(没有 MinGW)上成功编译 libzip(另请参阅我对该答案的评论):https://stackoverflow.com/a/30245321/784669

    最后,由于您可能希望立即运行,请尝试执行以下操作:

    • 您在 lib/zip_source_win32w.c 第 36 行对 swprintf 的调用,尝试仅删除函数 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;
    }
    
    • 这里是来自stackoverflow 的GetFileSizeEx 的另一个建议:https://stackoverflow.com/a/28028376/784669 所以问题可能出在您的Windows 版本上。事实上,在winbase.h 中,它说如果_WIN32_WINNT >= 0x0500 只定义GetFileSizeEx。也许您的 Windows 版本太旧或者您需要:

    _

    #define _WIN32_WINNT 0x0500
    

    祝你好运!

    【讨论】:

    • 这个#define _WIN32_WINNT 0x0500用函数GetFileSizeEx解决了这个bug。
    • 通过将swprintf 更改为snwprintf 也修复了运行时发生的错误。
    【解决方案2】:

    使用邮件列表: http://www.nih.at/listarchive/libzip-discuss/

    在 Windows 上的构建过程中加入了一些更改。

    到此结束 http://nih.at/listarchive/libzip-discuss/msg00574.html

    最终的结果再好不过了!他们解决了所有问题,我可以在 Windows 中构建 libzip。

    谢谢大家。

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 2019-05-15
      • 2021-11-12
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2013-06-27
      相关资源
      最近更新 更多