2012-02-08 58 views
1

情況: 我有很多gzip的輸入文件,我想在一個c程序中處理。每次我需要它們時,我都可以提取它們,但這需要很多時間,所以我想在內存提取中使用。作爲測試情況下,我下載了zlib的來源從http://zlib.net/並試圖編譯示例zpipe.c跳過不兼容的zlib dll

問題: 當我使用編譯zpipe.c:

x86_64-w64-mingw32-gcc -Wall -O3 zpipe.c -o zpipe -L. -lzlib1 

我得到的錯誤:

x86_64-w64-mingw32/bin/ld.exe: skipping incompatible ./zlib1.dll when searching for -lzlib1 

x86_64-w64-mingw32/4.5.4/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lzlib1 

我覺得是問題(我得到這個從Skipping incompatible error when linking

我嘗試鏈接一個32位DLL,而我在64位代碼編譯。當我看到http://zlib.net/zlib_faq.html#faq26時,據說zlib是在64位機器上測試的,但我想這意味着你仍然編譯32位代碼。請注意,我編譯zpipe.c(在zlib源文件中提供),所以我確定包含內容都可以。我將zlib1.dll放在編譯目錄中。

我做了什麼/發現: 除其他外,我發現2個很好的例子(但是他們兩個我上面描述的問題)

而我看了其他問題,如:

我也建立一個DLL自己在2010年的VC,但是,在zlib的1.26源中的所有項目配置了32位配置。所以在我構建一個DLL後,我有與上面相同的錯誤。

說來話長所以我的問題一個快速摘要:

  1. 有什麼我在編譯過程中做錯了什麼?
  2. 在64位編譯時,我無法使用zlib1 dll是否正確?
  3. 最重要的是:我可以以某種方式自己編譯一個64位版本的zlib(例如使用這些http://msdn.microsoft.com/en-us/library/9yb4317s.aspx指令),還是可以在某處使用這些版本(直到現在我才能找到這些版本)?

謝謝大家的時間!

回答

0

你絕對可以自己編譯一個64位版本。在Visual Studio中打開您的DLL項目,進入配置管理器併爲64位創建一個新的配置。你鏈接的指示應該沒問題。

如果您遇到問題,您還可以在應用程序中包含zlib的源代碼,而不是鏈接到DLL。

+0

是的,我正在嘗試這個,不幸的是這只是導致另一個問題,因爲在這裏:http://stackoverflow.com/questions/8044385/64-bit-build-on-microsoft-visual-c-express- 2010要回到我的問題,除非我編譯32位代碼,否則我永遠無法使用32位zlib dll是正確的? – Martin 2012-02-11 12:10:37

+0

好吧,最後這一切工作,所以可以說我的問題解決了:) – Martin 2012-02-13 09:20:14