我正在从事一个涉及Lua、PhysFS和xml解析器的PhysFS项目。它们每个都包含一个zlib。在PhysFS和Lua中,它是zlib版本1.2.3,在解析器中是1.2.5。它们在相同的VS2010解决方案中,但在不同的目标。建造每一个项目都很好。但是,VS2010在构建最终的可执行文件时,报告了链接器错误,例如_adler32、_inflate等已经定义好了。奇怪的是,当我在两台不同的计算机上工作时,一台是抱怨Lua & PhysFS中的多个声明,另一种是抱怨Lua & xml解析器。都与VS2010快车。
我需要一个解决办法来避免这样的问题。由于它们是维护良好的开放源码库,所以我不喜欢修改它们的源代码。
如果我将其中的每一个编译成.dll和.lib,它会起作用吗?我的理解是,多个zlib声明仍然在不同的.lib文件中。这是真的吗?
谢谢。
发布于 2013-11-03 05:36:00
解决这一问题的一种方法是通过动态链接,即预置DLL和相应的库文件.在lib文件中,只有一部分符号(声明)使用此DLL公开给项目。由于zlib符号是隐藏的,所以可以有多个zlib副本。
https://stackoverflow.com/questions/19734012
复制相似问题