1

我有一个想绑定到 Python 的 C++ 库。我开始使用 Pybindgen,它真的很容易使用,但是考虑到我的 C++ 库的大小,手动添加函数和命名空间需要很长时间。我已经阅读了有关 PyBindGen 的文档,特别是应该为我扫描头文件的 gccxml 部分。这将是理想的,但我无法让它正常运行。就像测试一样,我输入了我的主头文件并尝试导出它,但是我收到了这个错误:

python bindinggenerator.py
Traceback (most recent call last):
  File "bindinggenerator.py", line 16, in <module>
    main()
  File "bindinggenerator.py", line 9, in main
    module = module_parser.parse("include\\PhospheneEngine.h")
  File "C:\Users\paolo\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pybindgen\gccxmlparser.py", line 598, in parse
    pygen_classifier, gccxml_options)
  File "C:\Users\paolo\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pybindgen\gccxmlparser.py", line 658, in parse_init
    assert isinstance(header_files, list)
AssertionError

当然,我的 Python 代码基本上只是这里的修改示例。

import sys

import pybindgen
from pybindgen import FileCodeSink
from pybindgen.gccxmlparser import ModuleParser

def main():
    module_parser = ModuleParser('PhospheneEngine', '::')
    module = module_parser.parse("include\\PhospheneEngine.h")
    module.add_include("'include\\PhospheneEngine.h'")

    pybindgen.write_preamble(FileCodeSink(sys.stdout))
    module.generate(FileCodeSink(sys.stdout))

if (__name__ == '__main__'):
    main()

我安装了 gccxml 和 pygccxml(对于 Python 3.5)。该文档实际上并没有过多地说明此过程,因此可能会感谢您快速了解如何使用此功能。

提前致谢。

4

1 回答 1

1

parse 函数接受一个标题列表。

module = module_parser.parse(["include\\PhospheneEngine.h"])
于 2017-05-02T17:06:39.337 回答