2

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

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

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

谢谢。

4

1 回答 1

0

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

于 2013-11-03T05:36:00.143 回答