2010-12-15 70 views
0

我無法讓James Taylor在Windows下編譯出色的「seek-bzip2」?它可以對bzip2歸檔進行索引,然後使用該索引提供對歸檔各個塊的隨機訪問。幫助在Windows上編譯seek-bzip2

它是用C語言編寫,並需要64位長的多頭,可以在這裏找到:http://bitbucket.org/james_taylor/seek-bzip2

我無法得到它來編譯任何免費的Windows的C編譯器。

  • Borland沒有一些必需的頭文件。
  • lcc編譯它,但它在任何bzip2文件上出現「意外的EOF」失敗。
  • 如果你刪除了「-m64」標誌,mingw會編譯它,但它會失敗,就像上面的lcc一樣。

免費的編譯器似乎沒有很好的調試支持,MS Visual Studio拒絕安裝在我的移動硬盤上,而我的上網本的C和D驅動器缺少足夠的空間。


編輯我改寫這個問題,因爲我是問有人將它移植了我,但我很高興地嘗試將它移植自己。我只是不知道從哪裏開始。自從64位類型變得普遍之前,我沒有碰過C語言。

+1

我認爲更多的StackOverflow類型的問題將幫助您解決編譯錯誤,而不是爲您做端口。 – Rup 2010-12-15 14:31:34

+0

正如書面所述,這個問題在一個工作委員會(rentacoder或其他)中會更好。 – user9876 2010-12-15 14:42:57

回答

2

默認情況下,標準輸入和標準輸出將在文本模式下工作,轉換0A - > 0D 0A。您需要修改尋道bunzip主要以uncompressblock之前_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中包括
  • 附加包括:
    • 微bunzip.h:SYS/types.h中
    • 微bunzip.c:SYS/types.h中
    • 尋求-bunzip.c:SYS/types.h中,io.h,fnctl.h
  • 在微bunzip從微bunzip.c正向聲明get_bits,read_bunzip和start_bunzip。 h
  • 變化writelseek_write_lseek(又可能是MSVC只)

然後,它爲我工作後,我意識到,在命令行參數是一個位偏移量(即32爲第一個塊)不是一個字節偏移量。

+0

感謝Rup,我現在就去試試吧! – hippietrail 2010-12-15 16:52:36

+0

最後設法得到這個bitbucket:http://bitbucket.org/rup/seek-bzip2-vc10 – Rup 2010-12-15 17:39:59