On Wed, 24 Oct 2012 06:11:13 +0800, "D.Y Feng" <yyfeng88...@gmail.com> wrote: > I meet a problem in my code: > > hello.h: > > #include<QtCore> >> >> class Hello : public QObject{ >> Q_OBJECT >> public: >> Hello(QObject *parent = 0); >> static int test(){ >> static int i=0; >> qDebug()<<i++; >> return 0; >> } >> }; >> > > hello.cpp: > >> #include "hello.h" >> >> const int i=Hello::test(); >> >> Hello::Hello (QObject *parent) >> { >> } >> > > hello.sip > > %Module hello >> >> %Import QtCore/QtCoremod.sip >> >> >> class Hello : public QObject { >> >> %TypeHeaderCode >> #include "hello.h" >> %End >> >> public: >> Hello(QObject *parent = 0); >> static int test(); >> }; >> > > I use the* const int i=Hello::test();* to invoke test() before > *main*function.It's uesful in factory > pattern when you want to auto register driver. > > the python test code > >> import hello >> hello.Hello.test1() >> > > It seems *static int i* in *test() *changed after *import hello* > > Breakpoint 1, Hello::test1 () at hello.h:8 >> 8 static int test1(){ >> (gdb) p i >> $1 = 0 >> (gdb) p &i >> $2 = (const int *) 0x7ffff60300d0 >> (gdb) c >> Continuing. >> 0 >> >> Breakpoint 1, Hello::test1 () at main.h:8 >> 8 static int test1(){ >> (gdb) p &i >> $3 = (const int *) 0x7ffff60300d0 >> (gdb) n >> 10 qDebug()<<i++; >> (gdb) p &i >> $4 = (int *) 0x7ffff62355c0 <---What happen here? >> > > > Thx for reading.
If I have understood correctly you have C++ code that is linked against a .so and embeds Python which dlopens a sip generated extension module linked against the same .so. I don't know enough about Linux dynamic loading to say what happens to static initialisers in those circumstances - but I don't think it is a sip specific problem. Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt