Qt guiアプリケーションをPythonでブースト・モジュールとして実行できますか?これは標準のC++実行可能ファイルとして機能していましたが、今は共有ライブラリにコンパイルしてPythonから起動しようとしています。今は、インタプリタからsimpleMain()を実行するたびに、Pythonインタプリタに入ります。私がインタプリタを閉じると、毎回新しい "Python 2.7.1+(r271:86832、2011年4月11日、18:05:24)"という挨拶があり、私のプログラムはsegfaultsになります。また、私はpythonリストをchar * に変換する方法がわからないので、main関数を直接呼び出すことはできません。 charの文字列は自然に壊れているようです。ブースト・パイソン・モジュールによるC++ Qtアプリケーションの実行
これは、それを起動するために私のpythonのコードです:
import libsunshine
libsunshine.simpleMain()
、ここでは私のC++コードです:
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(libsunshine)
{
def("say_hello", say_hello);
def("simpleMain", simpleMain);
def("main", main);
}
int simpleMain()
{
char* args[] = {};
main(0,args);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Sunshine w;
w.show();
return a.exec();
}
を試してみてはメイン呼び出すことが、それは違法ですか?それは、慣例によってmainという名前の別の関数です。しかし、私は心からC++の標準を知らないので、私はここで間違っているかもしれません。 – Torp
@Torp:それに関する[質問はあります](http://stackoverflow.com/questions/4518598/is-it-legal-to-recurse-into-main-in-c)他も同様) – eudoxos
ああ。リンケージは実装定義です。私はコンパイラの作家が特別なやり方でそれを扱うことを気にしないと思います。この場合、main()をinit()という名前に移動し、boostから直接呼び出すことができ、それ以外の場合はmainから呼び出すことができます。また、モジュールとしてコンパイルするときにmain()を#ifdefすることもできます。 – Torp