在受损的开源库中存在多个zlib,链接器错误

时间:2013-11-01 19:28:14

标签: c++ visual-studio-2010

我正在开发一个涉及Lua,PhysFS和xml解析器的C ++项目。它们中的每一个都包含一个zlib。在PhysFS和Lua中,它是zlib版本1.2.3,在解析器中它是1.2.5。它们在相同的VS2010解决方案中,但在不同的项目中。建立每个项目都很好。但是,VS2010报告链接器错误,说明_ adler32 ,_ inflate 等已经定义,同时构建最终的可执行文件。奇怪的是,当我在两台不同的计算机上工作时,一个人抱怨Lua& amp; PhysFS,而另一个抱怨Lua& xml解析器。两者都带有VS2010 Express。

我需要一种解决方法来避免此类问题。由于它们是维护良好的开源库,我不想修改它们的源代码。

如果我将它们中的每一个编译成.dll和.lib,它会起作用吗?我的理解是,多个zlib声明仍然在不同的.lib文件中。这是真的吗?

感谢。

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是通过动态链接,即预先构建的DLL和相应的lib文件。在lib文件中,只有部分符号(声明)使用此DLL公开给项目。由于隐藏了zlib符号,因此可以使用多个zlib副本。