簡體   English   中英

Shiboken的C ++庫python綁定生成

[英]C++ library python binding generation with Shiboken

我在Wiki http://qt-project.org/wiki/PySide_Binding_Generation_Tutorial上遵循了該教程,但無法正常工作。 我在MacOSX上

到目前為止,這是我所做的:

  • 構建FooLib(靜態)---> libFooLib.a
  • 創建typesystem_foo.xml
  • 使用以下命令運行shiboken:

    shiboken-2.7 global.h --include-paths =。:/ opt / local / include / PySide-2.7:/ opt / local / include --typesystem-paths = / opt / local / share / PySide-2.7 / typesystems- -output-directory = .. / FooLibBinding typesystem_foo.xml

  • 從生成的c ++代碼-> libFooLibBinding.dylib構建FooLibBinding動態庫

現在,我不再只是從命令行運行python解釋器,而是制作了一個C ++程序,該程序將加載python解釋器並使用FooLib打開.py腳本。 該程序與libFooLibBinding.dylib動態鏈接,所以我猜到了foolib模塊工作所需的所有符號;)

這是代碼:

#include <iostream>
#include <Python.h>

int main(int argc, char* argv[])
{

    ///Python init
    Py_SetProgramName(argv[0]);
    Py_Initialize();
    PySys_SetArgv(argc, argv); /// relative module import

    ///Try out loading the module, this is just for testing
    /// -----------
    PyObject *sysPath = PySys_GetObject("path");
    PyObject *path = PyString_FromString("/Users/alexandre/Downloads/BindingTest");
    int result = PyList_Insert(sysPath, 0, path);
    PyObject *pModule = PyImport_ImportModule("foolib");
    if (PyErr_Occurred())
            PyErr_Print();
    /// -----------

    ///Our python file to interpret
    const char* filename = "/Users/alexandre/Downloads/BindingTest/FooLibTest/foolib_test.py";
    FILE* file = fopen(filename,"r");
    PyRun_SimpleFile(file,filename);

    ///close python
    Py_Finalize();
    return 0;
}

運行該程序時,它在嘗試首次加載該模塊時失敗,提示:ImportError:沒有名為foolib的模塊

然后第二次運行.py腳本時:

Traceback (most recent call last):
  File "/Users/alexandre/Downloads/BindingTest/FooLibTest/foolib_test.py", line 1, in <module>
    from foolib import FooClass
ImportError: No module named foolib

因此很明顯,它找不到從綁定生成的模塊。 我的問題是我應該怎么做才能找到它?

該教程使用了一個Makefile,但是似乎並沒有做太多的事情,只是鏈接了綁定動態庫。

Shiboken命令行的include路徑不包含foo.h的路徑。 我無法確定這是否是導致您出現問題的原因,但是如果執行相同的操作,則不會生成以下文件:

  • math_wrapper.cpp
  • math_wrapper.h

...您顯然需要能夠在foo庫中編譯對Maths類的支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM