在 C++ 中为其他语言创建库

Creating libraries in C++ for other languages

我想知道 best/most 创建 C++ 库的常用方法是什么,我可以在另一个 language.For 示例中为其创建包装器 如果我在 C++ 中创建库,我想在 C# 中为它创建一个包装器,然后在 Python.

中为 C++ 库创建一个包装器

如果可能的话,我还希望能够像一个文件一样轻松地将图书馆提供给另一个人?我还应该使用动态 Link 库还是静态 Link 库?对这类事情非常陌生,谢谢。

人们将 linkC 或 C++ 代码简化为其他语言的一种非常常见的方法是通过 Simplified Wrapper and Interface Generator. 对于它支持的语言运行时,它比紧密集成更容易理解接口使用您希望为您的图书馆运送的每种不同语言。

一般来说,这意味着创建一个动态库。加载动态库对于任何运行时都是一项简单的任务,但加载静态模块需要修改语言运行时。出于这个原因,为您引用的任何一个用例构建静态模块根本没有意义。

对于 Python,在正确配置构建后,您可以将库模块作为单个动态库发布(除非您 link 使用的库存在许可问题)。但是,用户通常希望使用标准 Python 安装工具将您的模块打包为 .egg 文件。

您应该准备好了解各个语言社区期望如何打包第三方包,以便尽可能容易地向他们介绍您的库。符合他们的期望会使您的图书馆看起来更专业、设计更好,并且更容易考虑他们的项目。

不过,我建议花一些时间更多地了解几种不同语言的外部函数接口,以熟悉 SWIG 有时无法完美隐藏的一些特性。例如,将值传递给其他语言需要 "boxing" 将 C++ 值转换为值类型,然后递增其引用计数。 SWIG 会为您执行此操作,但有时您别无选择,只能自己编写或调试部分代码。不熟悉这些 FFI 接口的工作原理将大大阻碍你。