不同库之间的命名冲突问题

8
我正在尝试编译我的程序,并使用了两个静态链接库:SFML和PhysFS。然而,在链接阶段,我遇到以下错误:
eror LNK2005: _inflatePrime已在sfml-graphics-s.lib(inflate.obj)中定义
error LNK2005: _inflateGetHeader已在sfml-graphics-s.lib(inflate.obj)中定义
error LNK2005: _adler32_combine已在sfml-graphics-s.lib(adler32.obj)中定义
error LNK2005: _crc32_combine已在sfml-graphics-s.lib(crc32.obj)中定义
error LNK1169:找到一个或多个重复定义的符号
当两个完全没有关联的库发生这种冲突时,我该怎么办?
编辑:哦,请不要告诉我我必须编写包装器。我已经厌倦了让事情正常工作,我只想写自己的代码。 :(

2
第一个问题是你使用C还是C++? - user2100815
2个回答

9

两个库似乎更喜欢包含zlib库而不是依赖它。我建议尝试在不包含zlib的情况下构建它们,并将可执行文件与zlib链接。


非常感谢,我担心我必须再经历一轮令人神经紧张的工作。如果其他人有类似的问题并且正在使用Visual Studio,请查看此链接以获取快速而肮脏的临时解决方案:http://msdn.microsoft.com/en-us/library/70abkas3%28v=VS.71%29.aspx - Paul Manta

0
假设你有库的源代码,这可能只需要添加几个命名空间即可。在库A的头文件中:
namespace LibA {

   // existing function declarations

}

而在C++源文件中:

namespace LibA {

    // existing code

}

对于库B也是一样,但命名空间名称不同。我意识到这很麻烦,但如果库确实存在名称冲突,这是最清晰的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接