我无法让James Taylor在Windows下编译出色的“seek-bzip2”?它可以索引bzip2存档,然后使用该索引提供对存档的各个块的随机访问。
它是用C语言编写的,需要64位长的长度,可以在这里找到:http://bitbucket.org/james_taylor/seek-bzip2
我无法在任何免费的Windows C编译器上编译它。
免费编译器似乎没有很好的调试支持,MS Visual Studio拒绝在我的移动硬盘上安装,而我的上网本的C和D驱动器缺乏足够的空间。
编辑我已经对这个问题进行了重写,因为我要求有人为我移植它,但我很乐意尝试自己移植它。我只是不知道从哪里开始。我没有触及C,因为在64位类型变得普遍之前。
答案 0 :(得分:2)
默认情况下,stdin和stdout将在文本模式下工作,翻译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的前导下划线 - 我不确定。除此之外我还需要:
write
和lseek
更改为_write
和_lseek
(也可能只是MSVC)在我意识到命令行参数是位偏移(即第一个块为32)而非字节偏移后,它对我有用。