[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

A portable way to link in all objects

From: Ronald Landheer-Cieslak
Subject: A portable way to link in all objects
Date: Wed, 28 May 2003 14:59:30 +0200 (CEST)

Hello all,

I am looking for a way to portably tell libtool to link in all objects of 
a given static library. Basically, my problem is this:

I have an object file containing "constructor" and "destructor"  
functions, which are not called from any program using my library, but
which are run automagically at startup (constructor) or shutdown
(destructor) time. Under gcc, this is implemented using
__attribute__((constructor)) resp. __attribute__((destructor)).

This scheme works like a charm when my libraries are shared: the program 
using the library loads the library into memory and the proper functions 
are automagically run. However, when the library is not shared, the object 
files containing the constructor and destructor functions don't get linked 
into the program, because the program has no business calling anything in 
the corresponding source file - and so doesn't. Hence, the constructor 
function doesn't get called at startup and all hell breaks loose.

One way I've thought about to work around this thing is to make a static 
object of which the constructor does its thing, resp. the destructor does 
its thing, for which I put an "extern" in the library's (only) API header 
file. This will probably work and, as most of the library is written in 
C++ anyway, will probably do as a solution. However, I was hoping there is 
some option I've overlooked in Libtool that makes static libraries and 
shared libraries behave the same in this respect - i.e. be linked 
completely into an executable (considering a shared library an executable 
as per the Libtool paradigm). Though this option would not be 
"satisfactory" in all situations, it would help here.

I know of the --whole-archive and --no-whole-archive linker options, but 
they probably won't help much for my problem, mostly because:
1. having to link the entire archive is a library attribute possibly 
   unknown to users of the library
2. the order in which libraries are linked and the options passed to them 
   are, and should be, the domain of Libtool *only* - I shouldn't have to 
   mess with that.
Hence, the option should be passable at the link stage *of the library*.

My questions (finally):
* does this feature already exist?
| + if so: where is it documented?
| - if not: would it be considered useful?
| | + if so: would you consider patches *without* a copyright waiver for 
| | | FSF? (don't have one - can't get one)
| | | - if not: would someone else consider implementing it? (I'd be happy 
| | | | to help out, if I could without infringing copyright restrictions)
| | - if not: why not?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]