跳过不兼容的zlib dll

时间:2012-02-08 21:04:10

标签: c compilation mingw zlib

情况: 我有很多gzip压缩输入文件,我想在c程序中处理。我每次需要它时都可以提取它们但这需要花费很多时间,所以我想在内存提取中使用它。作为测试用例,我从http://zlib.net/下载了zlib源代码并尝试编译示例zpipe.c

问题: 当我使用:

编译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得到的)

我在64位代码编译时尝试链接32位dll。当我看http://zlib.net/zlib_faq.html#faq26时,据说zlib是在64位机器上测试的,但我想这意味着你仍然可以编译32位代码。请注意,我编译zpipe.c(在zlib源代码中提供),所以我确定包含都没问题。我把zlib1.dll放在编译目录中。

我做了什么/找到了什么: 其中我发现了两个很好的例子(但是我们都有上述问题)

我看了其他问题,例如:

我自己也在vc 2010中构建了一个dll,但是,zlib 1.26源代码中的所有项目配置都是针对32位配置的。所以在我构建一个dll后,我遇到了与上面相同的错误。

一个长篇故事,所以我的问题的快速摘要

  1. 在编译过程中我有什么问题吗?
  2. 在64位编译时,我永远无法使用zlib1 dll是否正确?
  3. 最重要的是:我可以以某种方式自己编译一个64位版本的zlib(例如使用这些http://msdn.microsoft.com/en-us/library/9yb4317s.aspx指令),或者这些已经在某处可用(我直到现在才能找到它们)? / LI>

    谢谢大家的时间!

1 个答案:

答案 0 :(得分:0)

你绝对可以自己编译64位版本。在Visual Studio中打开DLL项目,进入配置管理器并为64位创建新配置。您链接的说明应该没问题。

如果您遇到此问题,还可以在应用程序中包含zlib的源代码,而不是链接到DLL。