(CC'ing the list as it might be of interest.)
I didn't think volatile would affect the linker. That might indeed work
if the llvm people think so. I'll try and run some tests when I get to it.
Thanks!
On 02/08/2019 09:54, Dmitriy Purgin wrote:
Oh, thanks, I didn't get it from the beginning.
I saw another trick in clang-tidy which apparently does the same thing:
declare a volatile variable in global context. See
https://github.com/llvm-mirror/clang-tools-extra/blob/master/clang-tidy/llvm/LLVMTidyModule.cpp#L41-L43
Cheers
Dmitriy
On Fri, Aug 2, 2019 at 8:40 AM Nikos Chantziaras <[email protected]
<mailto:[email protected]>> wrote:
The issue that started the whole discussion is that this sometimes
doesn't work when linking statically. The linker might remove
unreferenced global objects if you build your common code into a static
library that you then link into each application. Example:
https://stackoverflow.com/questions/806348/prevent-linker-from-removing-globals
From what I can tell, __attribute__((constructor)) won't let that
happen.
On 02/08/2019 09:32, Dmitriy Purgin wrote:
> Hey Nikos,
>
> as you noticed, the macro expands to a global static object which is
> instantiated automatically at program start, thus making it the
same as
> __attribute__((constructor)) but more portable since it also
works on
> non-GCC compilers
>
> Cheers
> Dmitriy
>
> On Fri, Aug 2, 2019 at 2:24 AM Nikos Chantziaras
<[email protected] <mailto:[email protected]>
> <mailto:[email protected] <mailto:[email protected]>>> wrote:
>
> That macro defines a global object in an unnamed namespace.
> Q_CONSTRUCTOR_FUNCTION(my_function) simply becomes:
>
> namespace {
> static const struct my_function_ctor_class_ {
> inline my_function_ctor_class_()
> {
> my_function();
> }
> } my_function_ctor_instance_;
> }
>
> So it doesn't apply any special attributes to the function.
>
>
> On 01/08/2019 12:18, Dmitriy Purgin wrote:
> > You could also use Q_CONSTRUCTOR_FUNCTION which is
probably more
> portable
> >
> > Cheers
> > Dmitriy
> >
> > On Wed, Jul 31, 2019 at 11:23 PM Nikos Chantziaras
> <[email protected] <mailto:[email protected]>
<mailto:[email protected] <mailto:[email protected]>>
> > <mailto:[email protected] <mailto:[email protected]>
<mailto:[email protected] <mailto:[email protected]>>>> wrote:
> >
> > On 29/07/2019 23:50, Tomas Konir wrote:
> > > I'm using C constructor attribute with no problems.
> > > Code like below at each class cpp file.
> > >
> > > static void constructor() __attribute__((constructor));
> > > static void constructor(){
> > > qmlRegisterType<ClassName>("ClassName", 1, 0,
> "ClassName");
> > > }
> > >
> > > Maybe it helps.
> >
> > Thanks! I didn't know about that one.
>
_______________________________________________
Interest mailing list
[email protected]
https://lists.qt-project.org/listinfo/interest