Message-Id: Comments: Authenticated sender is From: "Salvador Eduardo Tropea (SET)" Organization: INTI To: Nate Eldredge , djgpp AT delorie DOT com Date: Thu, 16 Oct 1997 15:31:48 +0000 MIME-Version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT Subject: Re: RHIDE Question. Precedence: bulk Nate Eldredge wrote: > At 04:32 10/15/1997 +0000, Salvador Eduardo Tropea (SET) wrote: > >Eli Zaretskii wrote: > > >> However, I think I have a case where the link order really is > >> important. This is when one or more of the modules being linked use > >> functions with `__attribute__((constructor))' or ((destructor)). > >> > >> For example, imagine that a program uses Filesystem Extensions to > >> install handlers for some special files, and uses the constructor > >> attribute to make the installation happen before `main' gets called. > >> > >> These functions will be invoked by the startup/exit code in the order > >> they are seen by the linker. And that order might be important, > >> e.g. when one function needs to install itself ahead of others, so it > >> sees the calls first. > >I faced this problem with constructors of classes and library functions that > >must be initialized before the constructor. I think the best way is to call > the > >initialization of the other module from the constructor. ************************************ > >If the module is > >already initialized it will return without making anything, if not is > >initialized. The other way is to check if the module is initialized in each > >function that's called externally. The last is a good practice and normally > >isn't slow to add: > > > >XXXX > >{ > > if (!initialized) > > initialize(); > >} > > > >in the entry points. In this way you don't depend on the order of the link. > Or how about this: > void initialize(void) __attribute__((constructor)); > > void initialize(void) > { > initialize_first_piece(); > initialize_second_piece(); > /* ... */ > } > Of course is valid, is the same I say above the ****************** ;-) SET ------------------------------------ 0 -------------------------------- Visit my home page: http://www.geocities.com/SiliconValley/Vista/6552/ Salvador Eduardo Tropea (SET). (Electronics Engineer) Alternative e-mail: set-sot AT usa DOT net - ICQ: 2951574 Address: Curapaligue 2124, Caseros, 3 de Febrero Buenos Aires, (1678), ARGENTINA TE: +(541) 759 0013