[PyQt] Wrong install name in dynamic libraries
Phil Thompson
phil at riverbankcomputing.com
Sun Feb 9 10:23:08 GMT 2014
On 06-02-2014 7:44 pm, Colin McPhail wrote:
> Platform - PyQt5.2 Qt5.2 Python 3.3.3 Mac OS X 10.9.1
>
> The Mac OS X dynamic libraries installed in the site-packages
> directory by
> the PyQt5 build system have incorrect install names recorded in them.
> For
> example QtCore.so has an install name of 'libQtCore.dylib', as shown
> by
> otool -D QtCore.so
>
> The reason for this is that each library is created as
> libQtxxx.dylib, copied
> to Qtxxx.so and then copied to .../site-packages/PyQt5/Qtxxx.so. The
> initial
> link command doesn't specify an install name and so the terminal name
> of the
> output library ('libQtxxx.dylib') is used by default.
>
> This doesn't cause a problem in normal use of PyQt5. However, a
> recent post
> by David Cortesi indicated that attempts to freeze an application for
> distribution using cx_freeze failed because cx_freeze could not
> locate
> libQtxxx.dylib files. Off-list I suggested that David manually
> correct the
> install names in his site-packages/PyQt5 direcory (using
> install_name_tool
> -id commands) and he has indicated that the cx_freeze process was
> then able to
> complete.
>
> Below are two patches, for PyQt-gpl-5.2/configure.py and
> QScintilla-gpl-2.8/Python/configure.py respectively, that set each
> dynamic
> library's install name to the full path of the library after
> installation.
>
> PyQt-gpl-5.2/configure.py
> *** configure_orig.py 2014-02-04 15:43:08.000000000 +0000
> --- configure.py 2014-02-06 12:54:52.000000000 +0000
> ***************
> *** 2234,2239 ****
> --- 2234,2240 ----
> }
> macx {
> QMAKE_LFLAGS += "-undefined dynamic_lookup"
> + QMAKE_LFLAGS += "-install_name $$absolute_path($$PY_MODULE,
> $$target.path)"
> }
> '''
>
> QScintilla-gpl-2.8/Python/configure.py
> *** configure_orig.py 2014-02-05 22:43:08.000000000 +0000
> --- configure.py 2014-02-06 17:26:55.000000000 +0000
> ***************
> *** 747,752 ****
> --- 747,753 ----
>
> macx {
> QMAKE_LFLAGS += "-undefined dynamic_lookup"
> + QMAKE_LFLAGS += "-install_name $$absolute_path($$PY_MODULE,
> $$target.path)"
> QMAKE_POST_LINK =
> $$QMAKE_POST_LINK$$escape_expand(\\\\n\\\\t)$$quote(install_name_tool
> -change libqscintilla2.%s.dylib %s/libqscintilla2.%s.dylib
> $$PY_MODULE)
> }
> ''' % (QSCI_API_MAJOR, target_config.qsci_lib_dir, QSCI_API_MAJOR))
>
> I have rerun a PyQt5 and QScintilla installation and have confirmed
> visually
> that the expected install names are now present in the dynamic
> libraries
> installed into site-packages.
>
> -- Colin McPhail
Applied.
Thanks,
Phil
More information about the PyQt
mailing list