...,后续 .

从我所参考的问题的答案中我了解到:

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

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

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

有帮助吗?

解决方案

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

  • 为了使 dll 能够被不同的编译器使用,它必须仅包含 C 函数(可以使用 C++ 编译器使用以下命令来编译它们) extern C)
  • 与通常的 dll 一样,可以使用静态导入库,以便可以直接调用 dll 中的函数,而不需要通过名称加载
  • 您可以使用一个包装库来代替常规导入库,将 dll 的 C 函数包装在 C++ 类和函数中
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top