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位版本。在Visual Studio中打开DLL项目,进入配置管理器并为64位创建新配置。您链接的说明应该没问题。
如果对此有疑问,还可以在应用程序中包含zlib的源代码,而不是链接DLL。