[PyQt] Symbol not found: _sipQtConnect (Qt5 and PyQt 4.10 on OSX, 32 bit)

Glenn Ramsey gr at componic.co.nz
Sat Mar 16 01:16:08 GMT 2013

On 15/03/13 22:07, Phil Thompson wrote:
> On Fri, 15 Mar 2013 15:51:00 +1300, Glenn Ramsey <gr at componic.co.nz>
> wrote:
>> Hi,
>> I have built a 32 bit version of PyQt on OSX (10.8.2) using Qt5, but it
>> doesn't
>> work:
>> Python 2.7.3 (default, Feb 26 2013, 11:03:37)
>> [GCC 4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang-421.0.60))] on
>> darwin
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> import PyQt4.QtCore
>> Traceback (most recent call last):
>>     File "<stdin>", line 1, in <module>
>> ImportError:
> dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyQt4/QtCore.so,
>> 2): Symbol not found: _sipQtConnect
>>     Referenced from:
> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyQt4/QtCore.so
>>     Expected in: flat namespace
>>    in
> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyQt4/QtCore.so
>> Is there a workaround for this issue?
>> My setup:
>> I'm using the git version of qt5 (5.0.x), because there is a bug in
> 5.0.1
>> that
>> prevents 32 bit builds on OSX, with the following config.
>> ./configure -platform macx-clang-32 -nomake docs -nomake examples
> -nomake
>> demos
>> -nomake tests  -nomake webkit -opensource -confirm-license -release
>> -no-c++11
>> sip 4.14.4
>> python configure.py --arch i386
>> PyQt 4.10 (commercial)
>> python configure.py --use-arch i386
>> I had to change qt_macx_spec in configure.py to get it work:
>> #qt_macx_spec = 'macx-g++'
>> qt_macx_spec = 'macx-clang-32'
>> The python version is 2.7 from MacPorts, built as 32 bit.
>> I have also rebuilt both sip and PyQt4 after doing a "make clean".
>> Glenn
> You are doing a few things which, at best, are untested.
> Can you "import sip"?

yes, that works fine:

Python 2.7.3 (default, Feb 26 2013, 11:03:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang-421.0.60))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
 >>> import sip
 >>> dir(sip)
['SIP_VERSION', 'SIP_VERSION_STR', '_C_API', '__doc__', '__file__', '__name__', 
'__package__', '_unpickle_enum', '_unpickle_type', 'cast', 'delete', 'dump', 
'getapi', 'isdeleted', 'ispycreated', 'ispyowned', 'setapi', 'setdeleted', 
'setdestroyonexit', 'settracemask', 'simplewrapper', 'transferback', 
'transferto', 'unwrapinstance', 'voidptr', 'wrapinstance', 'wrapper', 'wrappertype']
 >>> print sip.SIP_VERSION_STR

> There may be an issue building sip with macx-g++ and PyQt with
> macx-clang-32.

Even though the spec is macx-g++ sip actually builds using the system cc and 
c++, which are symlinks to clang and clang++ so they are both being built by the 
clang compiler.

sip-4.14.4$ python configure.py --arch=i386
This is SIP 4.14.4 for Python 2.7.3 on darwin.
The SIP code generator will be installed in
The sip module will be installed in
The sip.h header file will be installed in
The default directory to install .sip files in is
The platform/compiler configuration is macx-g++.
MacOS/X binaries will be created for i386.
Creating siplib/sip.h...
Creating siplib/siplib.c...
Creating siplib/siplib.sbf...
Creating sipconfig.py...
Creating top level Makefile...
Creating sip code generator Makefile...
Creating sip module Makefile...
sip-4.14.4$ make
cc -c -pipe -arch i386 -Os -w -DNDEBUG -I. -o main.o main.c
cc -c -pipe -arch i386 -Os -w -DNDEBUG -I. -o transform.o transform.c
cc -c -pipe -arch i386 -Os -w -DNDEBUG -I. -o gencode.o gencode.c
cc -c -pipe -arch i386 -Os -w -DNDEBUG -I. -o extracts.o extracts.c
cc -c -pipe -arch i386 -Os -w -DNDEBUG -I. -o export.o export.c
cc -c -pipe -arch i386 -Os -w -DNDEBUG -I. -o heap.o heap.c
cc -c -pipe -arch i386 -Os -w -DNDEBUG -I. -o parser.o parser.c
cc -c -pipe -arch i386 -Os -w -DNDEBUG -I. -o lexer.o lexer.c
c++ -headerpad_max_install_names -arch i386 -o sip main.o transform.o gencode.o 
extracts.o export.o heap.o parser.o lexer.o
cc -c -pipe -fPIC -arch i386 -Os -w -DNDEBUG -I. 
-o siplib.o siplib.c
cc -c -pipe -fPIC -arch i386 -Os -w -DNDEBUG -I. 
-o apiversions.o apiversions.c
cc -c -pipe -fPIC -arch i386 -Os -w -DNDEBUG -I. 
-o descriptors.o descriptors.c
cc -c -pipe -fPIC -arch i386 -Os -w -DNDEBUG -I. 
-o qtlib.o qtlib.c
cc -c -pipe -fPIC -arch i386 -Os -w -DNDEBUG -I. 
-o threads.o threads.c
cc -c -pipe -fPIC -arch i386 -Os -w -DNDEBUG -I. 
-o objmap.o objmap.c
cc -c -pipe -fPIC -arch i386 -Os -w -DNDEBUG -I. 
-o voidptr.o voidptr.c
c++ -c -pipe -fPIC -arch i386 -Os -w -DNDEBUG -I. 
-o bool.o bool.cpp
c++ -headerpad_max_install_names -bundle -undefined dynamic_lookup -arch i386 -o 
sip.so siplib.o apiversions.o descriptors.o qtlib.o threads.o objmap.o voidptr.o 

>  From previous experience I don't trust MacPorts stuff.

It was all working fine with Qt 4.8.4/PyQt4.9.5, but there is an issue with 
4.8.4 on OSX 10.6 that prompted us attempt to move to Qt 5.

What alternatives do I have given that I need a 32 bit build (due to some 3rd 
party code that isn't yet 64 bit compatible)?


More information about the PyQt mailing list