我按照 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++ 代码构建 FooLibBinding 动态库 --> libFooLibBinding.dylib
现在,我不再只是从命令行运行 python 解释器,而是创建了一个 C++ 程序,它可以加载 python 解释器并使用 FooLib 打开一个 .py 脚本。该程序与 libFooLibBinding.dylib 动态链接,所以我猜傻瓜模块工作所需的所有符号都在那里;)
这是代码:
#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: No module named 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,但似乎并没有做更多的事情,而不仅仅是链接绑定动态库。