Я работаю над некоторым кодом на С++, и я столкнулся с вопросом, который навязывал мне какое-то время... Предполагая, что я собираюсь с GCC на узле Linux для цели ELF, где находятся глобальные статические конструкторы и деструкторы, называемые?
Я слышал там функцию _init в crtbegin.o и функцию _fini в crtend.o. Вызывается ли их crt0.o? Или динамический компоновщик фактически обнаруживает свое присутствие в загруженном двоичном файле и вызывает их? Если да, когда это действительно называется?
Мне в основном интересно знать, поэтому я могу понять, что происходит за кулисами, когда мой код загружается, выполняется, а затем выгружается во время выполнения.
Спасибо заранее!
Обновление: я в основном пытаюсь выяснить общее время, в которое вызываются конструкторы. Я не хочу делать предположения в своем коде на основе этой информации, это более или менее, чтобы лучше понять, что происходит на более низких уровнях, когда загружается моя программа. Я понимаю, что это вполне специфично для ОС, но я попытался немного сузить его в этом вопросе.