【问题标题】:Creating libraries in C++ for other languages用 C++ 为其他语言创建库
【发布时间】:2016-09-06 03:56:04
【问题描述】:

我想知道创建可以用另一种语言创建包装器的 C++ 库的最佳/最常用方法是什么。例如,如果我用 C++ 创建一个库,我想为其创建一个包装器在 C# 中,然后在 Python 中为 C++ 库创建一个包装器。

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

【问题讨论】:

  • 很抱歉,这个问题似乎太宽泛,无法在此处获得简明的答案。

标签: c++ dll shared-libraries static-libraries libraries


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2011-02-19
    • 2014-11-20
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多