This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Linkage order in Linux


Hi Michael,

I have seen similar behavior with dueling __attribute__((constructor))
functions, in which case the simple fix (besides massaging the link
order) was to give the constructors an appropriate priority.

The only __attribute__ I found was:
define DLLEXP extern "C" __attribute__ ((visibility("default")))
I replaced it with:
define DLLEXP extern "C"
but that didn't help.

Ah, but if we are talking C++ libraries then it could still be a constructor priority issue. Matt was referring to this G++ extension to the C++ language: [Text taken from the GCC documentation.]


  In Standard C++, objects defined at namespace scope are
  guaranteed to be initialized in an order in strict accordance
  with that of their definitions *in a given translation unit*.
  No guarantee is made for initializations across translation
  units.  However, GNU C++ allows users to control the order of
  initialization of objects defined at namespace scope with the
  "init_priority" attribute by specifying a relative *priority*,
  a constant integral expression currently bounded between
  101 and 65535 inclusive.  Lower numbers indicate a higher
  priority.

  In the following example, A would normally be created before
  B, but the "init_priority" attribute has reversed that order:

    Some_Class  A  __attribute__ ((init_priority (2000)));
    Some_Class  B  __attribute__ ((init_priority (543)));

  Note that the particular values of "priority" do not matter;
  only their relative ordering.

So what you need to do is to identify the constructors in the Horde3D library that need to be run before constructors in the GL library and use this attribute to give them a priority. (I believe that the default priority for unattributed constructors is 65535).

Cheers
  Nick


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]