In *nix .so libraries, is there an entry point that's invoked by the system when the library is loaded and unloaded?
On a more practical note: if the .so was written in C++ and it contains global objects with constructors and destructors, and it's loaded from a language that has no notion of construction/destruction, are the global objects properly constructed/destructed?
You can use the __attribute__((constructor))
and __attribute__((destructor))
to execute code on load and unload of the shared library.
The technique used is a little different, but the
construction/destruction of global objects is more or less built into
the dynamic loader. (Even under Windows, there's no need to go through
DllMain
. The global objects will be constructed/destructed correctly
anyway.)