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

发布于 2024-07-24 01:08:36 字数 479 浏览 7 评论 0原文

...,此内容的后续内容

从我对参考问题的回答中我了解到:

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

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

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

..., a follow up to this.

From the answers I've been given to my referenced question I've learned that:

  • different compilers use different name decoration, which makes it impossible to use a C++ dynamic library built with compiler A in a project built with compiler B,
  • the library can be built as static saving me including n header and source files in the project or exporting symbols. (It still won't save rebuilding the library for use with a different compiler.)

Having a closer look at SDL in the light of what's been said, I've realized, that its linking has two layers: in my SDL project, I link statically against libSDL.a, which will, in turn, link dynamically against SDL.dll, thereby elminating the need for different .dll versions for different compilers.

The question is whether this is really the case and a viable solution to the problem, or am I missing something (and what)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

分開簡單 2024-07-31 01:08:36

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

  • 对于一个可以被不同编译器使用的 dll,它必须只包含 C 函数(它们可以使用 extern C 使用 C++ 编译器进行编译)
  • 。可以使用静态导入库,以便可以直接调用 dll 中的函数,而不需要通过名称加载。
  • 除了常规导入库之外,您还可以拥有一个包装库,将 dll 的 C 函数包装在 C++ 类和函数中

I think your approach is right. I'd put it this way:

  • For a dll to be usable by different compilers, it must contain only C functions (they can be compiled using a C++ compiler using extern C)
  • As usual with dlls, a static import library can be used so that functions in the dll can be called directly, rather than needing to be loaded by name
  • Instead of a regular import library, you could have a wrapper library that wraps the dll's C functions in C++ classes and functions
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文