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 インタープリターを実行する代わりに、Python インタープリターをロードし、FooLib を使用して .py スクリプトを開く C++ プログラムを作成しました。このプログラムは 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: No module namedfoolib
そして、.py スクリプトを実行するときに 2 回目:
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 を使用していますが、バインディング ダイナミック ライブラリをリンクするだけではないようです。