Создание привязки Python библиотеки C ++ с помощью Shiboken

Я следовал за учебником в вики 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

  • Создайте динамическую библиотеку FooLibBinding из сгенерированного кода C ++ -> libFooLibBinding.dylib

Теперь вместо того, чтобы просто запускать интерпретатор Python из командной строки, я создал программу на C ++, которая загружала бы интерпретатор Python и открывал сценарий .py с помощью FooLib. Эта программа динамически связывается с 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, но, кажется, не делает больше, чем просто связывает динамическую библиотеку привязки.

0

Решение

Ваш путь включения для командной строки Shiboken не включает путь к вашему foo.h. Я не могу сказать, является ли это причиной вашей проблемы, но если я сделал то же самое, он не будет генерировать следующие файлы:

  • math_wrapper.cpp
  • math_wrapper.h

…который вам, очевидно, понадобится, чтобы иметь возможность компилировать поддержку класса Maths в библиотеке foo.

0

Другие решения


По вопросам рекламы [email protected]