2

...,对此的跟进。

从我对引用问题的回答中,我了解到:

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

根据上述内容仔细查看 SDL,我意识到它的链接有两层:在我的 SDL 项目中,我静态链接到 libSDL.a,而 libSDL.a 又将动态链接到 SDL。 dll,从而消除了不同编译器对不同 .dll 版本的需求。

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

4

1 回答 1

3

我觉得你的做法是对的。我会这样说:

  • 为了让不同的编译器可以使用 dll,它必须只包含 C 函数(它们可以使用 C++ 编译器使用 编译extern C
  • 与 dll 一样,可以使用静态导入库,这样 dll 中的函数就可以直接调用,而不需要通过名称加载
  • 您可以拥有一个包装库,而不是常规的导入库,将 dll 的 C 函数包装在 C++ 类和函数中
于 2009-06-05T15:52:29.930 回答