Details
-
Bug
-
Resolution: Unresolved
-
P3: Somewhat important
-
None
-
5.15.2
-
None
-
Should happen for all .so where the linker version script is used.
Description
Hi,
Following file is creating the linker version script: https://code.qt.io/cgit/qt/qtbase.git/tree/mkspecs/features/qt_module.prf?h=5.15#n253
This calls: https://code.qt.io/cgit/qt/qtbase.git/tree/mkspecs/features/data/unix/findclasslist.pl?h=5.15
Which basically parses all the headers marked private and creates a symbol entry with heavy use of wildcards for every class / struct found.
For example when it parses following file: https://code.qt.io/cgit/qt/qtdeclarative.git/tree/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h?h=5.15#n759
it will create following output:
*8Renderer*;
This unfortunately causes the linker also to mark following symbol private:
Because it is also named Renderer.
This is causing compatibility issues on our operating system because our version of Qt is even more strict when it comes to the PRIVATE_API macro because of this patch: https://build.opensuse.org/package/view_file/KDE:Qt5/libqt5-qtbase/tell-the-truth-about-private-api.patch?expand=1
As far as I can see this affects also Qt6 but I cannot check it.
An easy way to see if the library is affected is via:
readelf -a --wide libQt5Quick.so | grep framebufferObject | c++filt
This returns: "7353: 000000000039be00 27 FUNC GLOBAL DEFAULT 14 QQuickFramebufferObject::Renderer::framebufferObject() const@@Qt_5.15.2_PRIVATE_API"
Maybe the perl script can be adapted so that it includes also the namespace?