Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python非平凡C++;延伸 我有相当大的C++库,它支持多个子库,我需要把整个事情变成一个Python扩展。我使用distutils是因为它需要跨平台,但如果有更好的工具,我愿意接受建议 有没有一种方法可以让ditutul首先编译子库,并在创建主库的时候将它们链接到? < p>我在产品中用一个大的C++库做这个。有几种工具可以帮助您自动化编写绑定的任务:最流行的是,它已经存在了一段时间,在许多项目中使用,并且通常工作得非常好 P.>对SWIG最大的反对(在我看来)是SWIG本身的C++代码库真的相当粗糙,使它温和。它是在STL之前编写的,并且有自己的半动态类型系统,现在已经很旧了。这不会有多大关系,除非你不得不陷入困境并对核心进行一些修改(我曾经尝试添加doxygen->docstring转换),但如果你这样做了,祝你好运!人们还说SWIG生成的代码没有那么高效,这可能是真的,但对我来说,我从来没有发现SWIG调用本身足以成为一个瓶颈来担心它 如果SWIG不浮出你的船,你可以使用其他工具:如果你已经在C++代码中使用了Boost库,那么它也很受欢迎。缺点是编译时它很重,因为它几乎都是基于C++模板的。_C++_Python_Swig_Distutils_Py++ - Fatal编程技术网

Python非平凡C++;延伸 我有相当大的C++库,它支持多个子库,我需要把整个事情变成一个Python扩展。我使用distutils是因为它需要跨平台,但如果有更好的工具,我愿意接受建议 有没有一种方法可以让ditutul首先编译子库,并在创建主库的时候将它们链接到? < p>我在产品中用一个大的C++库做这个。有几种工具可以帮助您自动化编写绑定的任务:最流行的是,它已经存在了一段时间,在许多项目中使用,并且通常工作得非常好 P.>对SWIG最大的反对(在我看来)是SWIG本身的C++代码库真的相当粗糙,使它温和。它是在STL之前编写的,并且有自己的半动态类型系统,现在已经很旧了。这不会有多大关系,除非你不得不陷入困境并对核心进行一些修改(我曾经尝试添加doxygen->docstring转换),但如果你这样做了,祝你好运!人们还说SWIG生成的代码没有那么高效,这可能是真的,但对我来说,我从来没有发现SWIG调用本身足以成为一个瓶颈来担心它 如果SWIG不浮出你的船,你可以使用其他工具:如果你已经在C++代码中使用了Boost库,那么它也很受欢迎。缺点是编译时它很重,因为它几乎都是基于C++模板的。

Python非平凡C++;延伸 我有相当大的C++库,它支持多个子库,我需要把整个事情变成一个Python扩展。我使用distutils是因为它需要跨平台,但如果有更好的工具,我愿意接受建议 有没有一种方法可以让ditutul首先编译子库,并在创建主库的时候将它们链接到? < p>我在产品中用一个大的C++库做这个。有几种工具可以帮助您自动化编写绑定的任务:最流行的是,它已经存在了一段时间,在许多项目中使用,并且通常工作得非常好 P.>对SWIG最大的反对(在我看来)是SWIG本身的C++代码库真的相当粗糙,使它温和。它是在STL之前编写的,并且有自己的半动态类型系统,现在已经很旧了。这不会有多大关系,除非你不得不陷入困境并对核心进行一些修改(我曾经尝试添加doxygen->docstring转换),但如果你这样做了,祝你好运!人们还说SWIG生成的代码没有那么高效,这可能是真的,但对我来说,我从来没有发现SWIG调用本身足以成为一个瓶颈来担心它 如果SWIG不浮出你的船,你可以使用其他工具:如果你已经在C++代码中使用了Boost库,那么它也很受欢迎。缺点是编译时它很重,因为它几乎都是基于C++模板的。,c++,python,swig,distutils,py++,C++,Python,Swig,Distutils,Py++,这两个工具都要求您预先做一些工作,以便定义将要公开的内容以及如何公开。对于SWIG,你提供了类似C++标题的界面文件,但被删除了,并用一些额外的指令来告诉SWIG如何翻译复杂的类型等等。编写这些界面可能很繁琐,所以你可能想看看一些帮助你自动生成它们的东西。 该包的作者实际上编写了另一个扩展,您可能会喜欢:。这个包做两件事:它可以自动生成绑定定义,然后将这些定义提供给boost.python来生成python绑定:基本上,它是大多数人的完整解决方案。如果没有特别特殊或困难的需求需要满足,您可能希望

这两个工具都要求您预先做一些工作,以便定义将要公开的内容以及如何公开。对于SWIG,你提供了类似C++标题的界面文件,但被删除了,并用一些额外的指令来告诉SWIG如何翻译复杂的类型等等。编写这些界面可能很繁琐,所以你可能想看看一些帮助你自动生成它们的东西。 该包的作者实际上编写了另一个扩展,您可能会喜欢:。这个包做两件事:它可以自动生成绑定定义,然后将这些定义提供给boost.python来生成python绑定:基本上,它是大多数人的完整解决方案。如果没有特别特殊或困难的需求需要满足,您可能希望从那里开始

其他一些可能被证明是有用的参考问题:

您还可以找到一个方便的Python绑定生成工具。正如Alex在评论中指出的,它现在已经相当古老了,但至少让你对风景有了一些了解


在如何驱动构建方面,您可能想看看一个更高级的构建工具,它可以区分:如果您想坚持使用Python,我强烈建议您将其作为一个框架(其他人会告诉您这是一条路,但请相信我,它非常慢:我已经去过那里,回来过了!)…这需要一些学习,但是当你把你的脑袋转过来的时候,它是非常强大的。而且,由于它是纯Python,因此它将与构建过程中使用的任何其他Python代码完美集成(例如,您最终使用的是Py++).

请注意,您引用为“this Comparison”的CERN报告已经有6年多的历史了,因此必须谨慎对待(!)。特别是SIP,在这些年里已经有了很大的发展,所以今天它非常值得考虑。