【问题标题】:How to bind using pybind11?如何使用 pybind11 进行绑定?
【发布时间】:2018-08-30 08:59:42
【问题描述】:

这是我的程序的结构:

我正在尝试将我的 C++ 程序与 python 中的 GUI 绑定。我正在使用 pybind11,我有一个用于绑定的 python_binding.cpp 文件和一些“.h”和“.cpp”以及其他目录中的方法。我包含了“.h”文件,但不知何故 python_binding.cpp 它无法识别它们。

文件 config.cpp 只有一个 void 方法,“cargar_configuracion()”,这就是它在绑定中的样子:

#include "Ejemplo/config.h"

PYBIND11_MODULE(Example, m) {
m.doc() = "Binding"; // optional module docstring


m.def("cargar_configuracion", &cargar_configuracion);

这样做的结果是以下错误:

undefined reference to `cargar_configuracion()'

我做错了什么?我应该将 .cpp 和 .h 与 binding.cpp 放在同一个目录中吗?

提前致谢!

【问题讨论】:

  • 您是否尝试将某个键绑定到某个函数?在这种情况下,您可以使用def callback(event): print('X: %d, Y: %d' %(event.x,event.y) ),然后您需要通过执行以下操作将左键单击绑定到该功能:bind("<Button-1>", callback)
  • 不明白你在问什么,我只需要在python中运行方法“cargar_configuracion()”。
  • 您希望按下哪个 *key*/button 来运行 cargar_confiuracion()?
  • 我的 GUI 上有一个按钮可以做到这一点
  • 那你需要告诉我们你用什么模块来显示你的GUI按钮

标签: python c++ pybind11


【解决方案1】:

您的 pybind11 看起来不错,这是链接器错误。看起来config.cpp 在您的解决方案中的另一个项目中,并且正在单独的可执行文件中构建。您在这里有两个选择,要么将 config.cpp 复制到同一目录中,要么将 Ejemplo 重新配置为静态库,并将其指定为 python 包装器项目的属性中的依赖项。

【讨论】:

    【解决方案2】:

    从以下位置更改您的代码:

    bViewResult = QtWidgets.QPushButton('View Results', self) 
    bViewResult.clicked.connect(self.openCSV)
    

    到:

    bViewResult = QtWidgets.QPushButton('View Results', self)
    bViewResult.clicked.connect(cargar_configuracion())
    

    【讨论】:

    • 对不起,但这不是我要的,也许我的问题不太清楚。我想知道如何使用 Pybind11 为 C++ 方法进行声明,因为我这样做的方式会出错。
    猜你喜欢
    • 2021-06-04
    • 2018-08-18
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2021-07-02
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多