Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22001

Linux shared library init & deinit when also using c++ static initializer

$
0
0

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:

But the provided solutions won't fit my needs. In both approaches (__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.


Viewing all articles
Browse latest Browse all 22001

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>