0

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 を使用していますが、バインディング ダイナミック ライブラリをリンクするだけではないようです。

4

1 に答える 1

0

Shiboken コマンド ラインのインクルード パスに、foo.h へのパスが含まれていません。これが問題の原因かどうかはわかりませんが、同じことをした場合、次のファイルは生成されません。

  • math_wrapper.cpp
  • math_wrapper.h

...これは明らかに、foo ライブラリの Maths クラスのサポートをコンパイルできる必要があります。

于 2014-11-26T16:01:50.833 に答える