帮助在 Windows 上编译 seek-bzip2

Posted

技术标签:

【中文标题】帮助在 Windows 上编译 seek-bzip2【英文标题】:Help compiling seek-bzip2 on Windows 【发布时间】:2010-12-15 14:22:36 【问题描述】:

我无法让 James Taylor 出色的小“seek-bzip2”在 Windows 下编译?它可以索引 bzip2 存档,然后使用该索引提供对存档各个块的随机访问。

它是用 C 编写的,需要 64 位长的 long,可在此处获得:http://bitbucket.org/james_taylor/seek-bzip2

我无法让它在任何免费的 Windows C 编译器上编译。

Borland 没有一些必需的头文件。 lcc 编译它,但它在任何 bzip2 文件上都因“意外 EOF”而失败。 如果你删除“-m64”标志,mingw 将编译它,但它会以与上述 lcc 相同的方式失败。

免费的编译器似乎没有很好的调试支持,MS Visual Studio 拒绝安装在我的移动硬盘上,而且我上网本的 C 和 D 驱动器空间不足。


编辑我已经改写了这个问题,因为我要求有人为我移植它,但我很高兴自己尝试移植它。我只是不知道从哪里开始。自从 64 位类型变得普遍之前,我就没有接触过 C。

【问题讨论】:

【参考方案1】:

默认情况下,标准输入和标准输出将在文本模式下工作,翻译 0A -> 0D 0A。您需要在 uncompressblock 之前将 seek-bunzip 的 main 修改为 _setmode stdin 和 stdout 作为二进制文件:

int main( int argc, char *argv[] )

    unsigned long pos = atol( argv[1] );
    int status;
    _setmode(0, _O_BINARY);
    _setmode(1, _O_BINARY);
    status = uncompressblock( 0, pos );
    if ( status )
        fprintf( stderr, "\n%s\n", bunzip_errors[-status] );

这对我来说是使用 MSVC++10 的诀窍。您可能需要在其他编译器上丢失 _setmode 和 _O_BINARY 的前导下划线 - 我不确定。除此之外,我还需要:

删除 unistd.h 包含 添加包括: micro-bunzip.h: sys/types.h micro-bunzip.c: sys/types.h seek-bunzip.c: sys/types.h、io.h、fnctl.h 从 micro-bunzip.h 中的 micro-bunzip.c 向前声明 get_bits、read_bunzip 和 start_bunzip 将writelseek 更改为_write_lseek(同样可能仅适用于MSVC)

然后它对我有用,在我意识到命令行参数是一个位偏移量(即第一个块为 32)而不是字节偏移量之后。

【讨论】:

终于设法在 bitbucket 上得到了这个:bitbucket.org/rup/seek-bzip2-vc10

以上是关于帮助在 Windows 上编译 seek-bzip2的主要内容,如果未能解决你的问题,请参考以下文章

C++/LapackE 代码在 Windows 上编译良好,但相同的代码在 Linux 上编译失败

VRPN C++ 代码可在 Linux 上编译,但不能在 Windows 上编译

如何在 Windows 上编译它

如何在 Windows 上编译skia

在 Windows 上编译时出现 Apache thrift 错误

无法在 Windows 10 上编译 Cairo C 代码