C 帮助在Windows上编译seek-bzip2

C 帮助在Windows上编译seek-bzip2,c,windows,compression,archive,bzip2,C,Windows,Compression,Archive,Bzip2,我无法在Windows下编译James Taylor出色的小“seek-bzip2”?它可以索引bzip2归档文件,然后使用该索引提供对归档文件各个块的随机访问 它是用C编写的,需要64位长的long,可在以下位置获得: 我无法让它在任何免费的WindowsC编译器上编译 Borland没有一些必需的头文件 lcc对其进行编译,但在任何bzip2文件上出现“意外EOF”时失败 如果删除“-m64”标志,mingw将编译它,但它将以与上面lcc相同的方式失败 免费的编译器似乎没有很好的调试支持

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

它是用C编写的,需要64位长的long,可在以下位置获得:

我无法让它在任何免费的WindowsC编译器上编译

  • Borland没有一些必需的头文件
  • lcc对其进行编译,但在任何bzip2文件上出现“意外EOF”时失败
  • 如果删除“-m64”标志,mingw将编译它,但它将以与上面lcc相同的方式失败
免费的编译器似乎没有很好的调试支持,MS Visual Studio拒绝在我的可移动硬盘上安装,我的上网本的C和D驱动器空间不足



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

默认情况下,stdin和stdout将在文本模式下工作,翻译0A->0d0a。在解压块之前,您需要将seek bunzip的main修改为_setmodestdin和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_位,读取_bunzip并启动_bunzip
  • write
    lseek
    更改为
    \u write
    \u lseek
    (也可能仅限于MSVC)

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

最终在bitbucket上得到了这个结果: