Problem with qscintilla/Qt5 linking(?)

Jan Palus atler at pld-linux.org
Sat Apr 9 11:13:17 CEST 2022


On 09.04.2022 10:57, Jan Rękorajski wrote:
> On Fri, 08 Apr 2022, Jan Palus wrote:
> 
> > On 08.04.2022 09:53, Jan Palus wrote:
> > > On 08.04.2022 09:01, Jan Rękorajski wrote:
> > > > 
> > > > Python 3.10.4 (main, Apr  1 2022, 09:00:14) [GCC 11.2.0 20220208 (release)] on linux
> > > > Type "help", "copyright", "credits" or "license" for more information.
> > > > >>> from PyQt5 import Qsci
> > > > Traceback (most recent call last):
> > > >   File "<stdin>", line 1, in <module>
> > > > ImportError: /usr/lib64/python3.10/site-packages/PyQt5/Qsci.so: undefined symbol: _ZTI11QsciPrinter
> > > > 
> > > > As far as I can see the symbol is there, recompiling qscintilla2 does
> > > > not fix it.
> > > > 
> > > > Could someone more versed in the linker(?) take a look at it?
> > > 
> > > Unfortunately it has not much to do with linking, but rather with qmake.
> > > 
> > > Above symbol is defined in libqscintilla2_qt5.so which is not linked to the
> > > module, that's the reason for undefined symbol:
> > > 
> > > x86_64-pld-linux-g++ -Wl,--as-needed -Wl,--no-copy-dt-needed-entries -Wl,-z,relro -Wl,-z,combreloc -Wl,--version-script=Qsci.exp -Wl,-O1 -shared -o libQsci.so sipQscipart0.o sipQscipart1.o sipQscipart2.o  -L/tmp/B.ldcyigur/BUILD/QScintilla-2.11.6/build-qt5/Qt4Qt5 /usr/lib64/libQt5PrintSupport.so /usr/lib64/libQt5Widgets.so /usr/lib64/libQt5Gui.so /usr/lib64/libQt5Core.so -lGL -lpthread
> > > 
> > > I guess linking to libqscintilla2_qt5.so should come from:
> > > 
> > > Python/configure.py:
> > > qmake = {'CONFIG': 'qscintilla2'...
> > > 
> > > but perhaps due to the way we build python module it can't find newly built qscintilla2? No idea.
> > > 
> > > A brute force workaround is to BR: qscintilla2-qt5-devel so it finds system config.
> > 
> > Fixed in 2.11.6-2.
> 
> Thanks, I wonder how that symbol was defined if our rpm post-checks didn't
> catch it's missing.

One reason for sure is that we don't consider files not matching *.so.*
glob:

    printf "Searching for shared objects with unresolved symbols..."; \
    for f in $(find $RPM_BUILD_ROOT -type f -name '*.so.*' -print);

and the other reason is likely related to why we don't consider *.so --
these are usually plugins which happen to have plenty of unresolved
symbols which are only resolved at runtime (provided by "loader"). Like
ie python binary extensions which are rarely linked to libpython and
hence would require special handling.


More information about the pld-devel-en mailing list