2011-06-04 193 views
8

我想用两个静态链接库来编译我的程序:SFML和PhysFS。然而,在链接阶段我得到了以下错误:不同库之间的命名冲突

eror LNK2005:_inflatePrime已经定义SFML-图形s.lib(inflate.obj)
错误LNK2005:_inflateGetHeader已经定义SFML,图形 - (inflate.obj)
错误LNK2005:已在sfml-graphics-s.lib(adler32.obj)中定义_adler32_combine
错误LNK2005:_crc32_combine已在sfml-graphics-s.lib(crc32.obj)中定义
错误LNK1169:找到一个或多个多重定义符号

当两个完全无关的图书馆有这种冲突时,我该怎么办?

编辑:哦,请 - 请告诉我我不会写封装。我已经厌倦了不得不开始工作,我只想写我自己的代码。 :(

+2

第一个问题是你使用C还是C++? – 2011-06-04 13:04:44

+0

@Neil It's C++。 – 2011-06-04 13:06:15

回答

9

李都braries似乎更愿意包含zlib库而不是依赖它。我试图在没有这个包含的情况下构建它们,并将可执行文件与zlib链接起来。

+0

非常感谢,我担心我将不得不经历另一轮令人心碎的工作。如果其他人有类似的问题,并且他们正在使用Visual Studio,请查看此链接以获取快速而肮脏的临时解决方案:http://msdn.microsoft.com/en-us/library/70abkas3%28v=VS。 71%29.aspx – 2011-06-04 13:47:24

0

假设你有库的源代码,这可能是简单的添加一些命名空间的在库中的头文件:

namespace LibA { 

    // existing function declarations 

} 

,并在C++源文件:

namespace LibA { 

    // existing code 

} 

同为库B,但有不同的命名空间的名字,我意识到这是一个痛苦,但如果库确实有名称冲突,它是最干净的方法。