[Development] qt6_add_shaders and static libraries

Ranen Ghosh ranen.ghosh at navblue.aero
Wed Sep 13 15:47:36 CEST 2023


Hi Alexandru.  Thanks for the response.

Yes, confirmed we used target names for linking (not file paths)

> Are you perhaps adding the shadert to a static library in one project,
and then trying to reuse the static library in a different project?

Yes, this is what we are trying to do.

I've found that using the OUTPUT_TARGETS parameter returns the name of the
"special target" associated with the resources, which is not the same as
<RESOURCE_NAME>.  This special target name has a static lib of its own
generated ( for this platform it's lib<special_target_name>.a ).  So I have
a chance of massaging the cmake to find and link to this file...



Ranen Ghosh

Software Developer | EFB | tel. +1519 747 1170

 NAVBLUE <https://www.navblue.aero/> | 295 Hagey Blvd., Suite 200 | Waterloo
| AMER



This message is intended only for the personal, confidential, and
authorized use of the recipient(s) named above. If you are not that person,
you are not authorized to review, use, copy, forward, distribute or
otherwise disclose the information contained in the message


On Wed, Sep 13, 2023 at 5:02 AM Alexandru Croitor <alexandru.croitor at qt.io>
wrote:

> Hi,
>
> The object file is supposed to be automatically linked into your
> application when you link to the static library target.
> That's handled by the qt6_add_resources call that qt6_add_shaders call,
> and it assumes you use target names for linking, and not file paths.
> If it doesn't, i suspect you're doing something special in your project.
> Are you perhaps adding the shadert to a static library in one project, and
> then trying to reuse the static library in a different project?
>
>
> > On 13. Sep 2023, at 00:10, Ranen Ghosh via Development <
> development at qt-project.org> wrote:
> >
> > Hi, I've found that there's a cpp file, and then an object file,
> generated with the name qrc_<RESOURCE_NAME>.  And the object file includes
> the symbol qInitResources_<RESOURCE_NAME>
> > (See https://doc.qt.io/qt-6/qt-add-resources.html for where
> <RESOURCE_NAME> comes from, as qt6_add_shaders calls qt6_add_resources)
> >
> > So the only remaining issue is that just calling qt6_add_shaders in the
> cmake and Q_INIT_RESOURCE(<RESOURCE_NAME>) in cpp results in
> >
> > Undefined symbol: qInitResources_<RESOURCE_NAME>()
> >
> > So there is still something remaining to do in the cmake that is not
> handled by the call to qt6_add_shaders.
> >
> >
> > Ranen Ghosh
> > Software Developer | EFB | tel. +1519 747 1170
> >  NAVBLUE | 295 Hagey Blvd., Suite 200 | Waterloo | AMER
> >
> > This message is intended only for the personal, confidential, and
> authorized use of the recipient(s) named above. If you are not that person,
> you are not authorized to review, use, copy, forward, distribute or
> otherwise disclose the information contained in the message
> >
> >
> > On Tue, Sep 12, 2023 at 6:39 AM Ranen Ghosh <ranen.ghosh at navblue.aero>
> wrote:
> > Hi,
> >
> > How does one use qt6_add_shaders in static libraries?  When running an
> application that uses said static library, we get this error messages like
> this
> >
> > Failed to find shader "://shader.vert.qsb"
> >
> > We're using static linking because the target platform is iOS.  On
> Windows where we use dynamic linking, we have no problem.
> >
> > We follow this practice for qrc resources which works fine
> > "When embedding resources in static libraries,... explicitly register
> your resources by calling Q_INIT_RESOURCE() with the base name of the .qrc
> file."
> >
> >
> https://doc.qt.io/qt-6/resources.html#explicit-loading-and-unloading-of-embedded-resources
> >
> > How does this relate to shaders added with qt6_add_shaders?  From the
> examples we have seen demonstrating qt6_add_resources, it does not seem to
> involve qrc.  For example,
> >
> >
> https://github.com/qt/qtshadertools/blob/26ffa67b0212255e29ec751bc25ebef65973ee99/tests/auto/buildtimeqsb/CMakeLists.txt
> >
> > qt6_add_shaders(tst_buildtimeqsb "shaders"
> >     PREFIX
> >         "/test"
> >     FILES
> >         "color.vert"
> >         "color.frag"
> > )
> >
> >
> https://github.com/qt/qtshadertools/blob/26ffa67b0212255e29ec751bc25ebef65973ee99/tests/auto/buildtimeqsb/tst_buildtimeqsb.cpp
> >
> > QShader color_vert = getShader(QLatin1String(":/test/color.vert.qsb"));
> >
> > (The URI does not have the qrc scheme)
> >
> > Thanks,
> > Ranen
> > --
> > Development mailing list
> > Development at qt-project.org
> > https://lists.qt-project.org/listinfo/development
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20230913/1a285e8f/attachment.htm>


More information about the Development mailing list