消除了C ++动态库的编译器间不兼容问题

时间:2009-06-05 14:52:14

标签: c++ dynamic-linking static-linking name-decoration

...,跟进this

从答案中我得到了我所提到的问题:

  • 不同的编译器使用不同的名称修饰,这使得在使用编译器B构建的项目中无法使用使用编译器A构建的C ++动态库,
  • 库可以构建为静态保存,包括项目中的n个头文件和源文件或导出符号。 (它仍然不会保存重建库以便与其他编译器一起使用。)

根据已经说过的内容深入了解SDL,我意识到,它的链接有两层:在我的SDL项目中,我静态地链接到libSDL.a,它将依次动态链接针对SDL.dll,从而消除了对不同编译器的不同.dll版本的需求。

问题是这是否真的如此,是问题的可行解决方案,还是我错过了什么(以及什么)?

1 个答案:

答案 0 :(得分:3)

我认为你的做法是正确的。我这样说:

  • 对于不同编译器可以使用的DLL,它必须只包含C函数(可以使用extern C使用C ++编译器进行编译)
  • 与dll一样,可以使用静态导入库,以便可以直接调用dll中的函数,而不需要按名称加载
  • 您可以使用包装库来代替常规导入库,该包装库在C ++类和函数中包装dll的C函数