[PyQt] Linking Qt statically into a project using embedded Python
and Sip/PyQt
Ulrich Berning
ulrich.berning at denviso.de
Wed Feb 4 15:42:30 GMT 2009
George Goussard wrote:
> Hello.
>
> My project that I am currently working on is a cross-platform C++
> project. On Linux 32-bit/64-bit I have the constraint that I MUST link
> Qt (4.3.3) in statically with the project. This is a given and cannot
> be compromised. I have successfully embedded Python into our
> application and with this facility I can run external Python *.py
> files. With the help of Sip/PyQt used in these *.py files I can route
> the output to a nice window inside my Qt application etc. etc.
> But,....the problem is that it only works if I link Qt in dynamically
> to my application.
>
> The reason(I think – when I link dynamically to Qt) is because my
> application loads the Qt *.so file dynamically when I startup the
> application. Then when the application runs an external *.py file and
> it has the line “from PyQt import QtCore” then I suppose that it sees
> the *.so is already loaded and uses it. Now my question: How can I
> either get the Python mechanism or Sip/PyQt to rather use the
> statically linked in Qt with my project?
>
> Currently, if I link Qt statically into my application and run the
> *.py files I get some strange Qt message on the command line and then
> it crashes.
>
> George.
>
The only way to do this, is to have everything statically linked:
- Build a static Python library
- Build a static SIP library
- Build static PyQt libraries
Use PyImport_ExtendInittab() to declare the module initialization
functions for SIP and all PyQt modules you need in your application.
This must be done before you initialize the python interpreter with
Py_Initialize().
Ulli
More information about the PyQt
mailing list