[英]C++ library python binding generation with Shiboken
我在Wiki http://qt-project.org/wiki/PySide_Binding_Generation_Tutorial上遵循了該教程,但無法正常工作。 我在MacOSX上
到目前為止,這是我所做的:
使用以下命令運行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的路徑。 我無法確定這是否是導致您出現問題的原因,但是如果執行相同的操作,則不會生成以下文件:
...您顯然需要能夠在foo庫中編譯對Maths類的支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.