不同库之间的命名冲突

时间:2011-06-04 13:02:45

标签: c++

我正在尝试使用两个静态链接库编译我的程序:SFML和PhysFS。但是,在链接阶段,我收到以下错误:

  

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

当两个完全不相关的图书馆发生这种冲突时,我该怎么办?

编辑:哦,请 - 请告诉我,我不打算写一个包装。我已经厌倦了要把事情搞定,我只想写自己的代码。 :(

2 个答案:

答案 0 :(得分:9)

两个库似乎都倾向于包含zlib库而不是依赖它。我尝试在没有这个包含的情况下构建它们并将可执行文件与zlib链接。

答案 1 :(得分:0)

假设您有库源代码,这可能就像添加几个名称空间一样简单。在库A的头文件中:

namespace LibA {

   // existing function declarations

}

并在C ++源文件中:

namespace LibA {

    // existing code

}

库B相同,但名称空间不同。我意识到这很痛苦,但如果图书馆真的有名字冲突,那就是最干净的方法。