I want to have automated calls to initialize and deinitialize my shared library.
In my shared library, I need some static initialization of C++ objects, among others because of use of third party code (e.g. UnitTest++). When my init function is executed, I need to be guaranted, that all static initialization of C++ objects (of all linked translation units) is done (and vice versa for deinit); so just the same conditions as the execution of main() can expect in a C++ program.
I've seen much informations about linux shared library init/deinit e.g. like:
- Automatically executed functions when loading shared libraries
- How to initialize a shared library on Linux
- http://www.faqs.org/docs/Linux-HOWTO/Program-Library-HOWTO.html#INIT-AND-CLEANUP
__attribute__((constructor)) and even -Wl,-init,<function name>) the init function seems to be called before static initialization of C++ objects is completely done.
I also played around with __attribute__ ((init_priority(…))) like:
class InitAndDeinit {
public:
    InitAndDeinit() {
        // Do some initialization
    }
    ~InitAndDeinit() {
        // Do some cleanup
    }
} initAndDeinit __attribute__((init_priority(65535)));
But that also won't place the calls to the desired point; even with __attribute__((constructor(65535))).
I'd tested with gcc 4.6.4, 4.7.3 and 4.8.1 (4.6.4 shows a slightly different behaviour regarding the sorting of __attribute__((constructor))).
Any suggestions?
My current workaround is to provide exported functions (lib_init() and lib_deinit()) which have to called manually by the application.
 
     
     
    