我想知道创建C ++库的最佳/最常用的方法是什么,我可以用另一种语言创建一个包装器。例如,如果我用C ++创建一个库,我想创建一个包装器在C#中使用它,然后在Python中为C ++库创建一个包装器。
如果可能的话,我还希望能够轻松地将图书馆提供给另一个人,就像一个文件一样?我还应该使用动态链接库还是静态链接库?这件事非常新鲜,谢谢。
答案 0 :(得分:2)
人们简化将C或C ++代码链接到其他语言的一种非常常见的方式是通过Simplified Wrapper and Interface Generator.对于它支持的语言运行时,它比使用每种不同语言紧密集成更容易理解界面你希望运送你的图书馆。
一般来说,这意味着要创建一个动态库。加载动态库对任何运行时来说都是一项简单的任务,但加载静态模块需要修改语言运行时。出于这个原因,为您引用的任何一个用例构建一个静态模块根本没有意义。
对于Python,在正确配置构建的情况下,您可以将库模块作为单个动态库发送(禁止链接到库的许可问题)。但是,用户通常希望使用标准Python设置工具将您的模块打包为.egg
文件。
您应该准备好了解每个语言社区如何预期打包第三方软件包,以便尽可能简化向您介绍库。符合他们的期望使您的图书馆看起来更专业,设计更好,更容易考虑他们的项目。
然而,我建议花些时间了解一些不同语言的外部函数接口,以熟悉SWIG有时无法完美隐藏的一些特性。例如,将值传递给另一种语言需要"拳击"将C ++值转换为值类型,然后递增其引用计数。 SWIG会为您做这件事,但有时候您别无选择,只能亲自编写或调试部分代码。不熟悉那些FFI接口的工作方式会对你产生很大影响。