关于C#:跳过不兼容的zlib dll

Skipping incompatible zlib dll

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

问题:
当我使用以下命令编译zpipe.c时:

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

我得到了错误:

1
2
3
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

我认为是问题所在(我是从链接时跳过不兼容错误中得到的)

当我用64位代码编译时,我尝试链接32位dll。当我查看http://zlib.net/zlib_faq.html#faq26时,据说zlib在64位计算机上进行了测试,但是我想这意味着您仍在编译32位代码。请注意,我编译了zpipe.c(在zlib源代码中提供),因此我确定所有包含都可以。我将zlib1.dll放在了编译目录中。

我该怎么做/发现:
除其他外,我发现了2个很好的例子(但是我和他们都有上述问题)。

  • http://www.codeguru.com/cpp/cpp/algorithms/compression/article.php/c11735
  • http://bobobobo.wordpress.com/2008/02/23/how-to-use-zlib/

然后我看了其他问题,例如:

  • 尝试编译使用zlib的程序。链接未解决的错误
  • 在编译时跳过不兼容的库

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

长话短说,我的问题摘要如下:

  • 编译期间我做错什么了吗?
  • 以64位编译时永远无法使用zlib1 dll是否正确?
  • 最重要的一点是:我可以自己自己以某种方式编译zlib的64位版本(例如,使用以下http://msdn.microsoft.com/zh-cn/library/9yb4317s.aspx指令),还是可以在某个地方使用这些指令(我直到现在都找不到这些)?
  • 谢谢大家的光临!


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

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