Я разрабатываю общую библиотеку с использованием C++ в Linux, и я хотел бы, чтобы эта библиотека использовала log4cxx для ведения журнала. Однако я не уверен, как это сделать. Для работы log4cxx мне нужно создать объект журнала. Как я могу убедиться, что этот объект создан при загрузке моей библиотеки?Как инициализировать общую библиотеку в Linux
Я подозреваю, что было бы проще создать объект журнала как глобальную переменную, а затем использовать его из любого из исходных файлов моей библиотеки, объявив его как extern в заголовках. Но как я могу создать регистратор автоматически, как только приложение подключится к библиотеке?
Я знаю, что в DLL для Windows есть что-то вроде REASON_FOR_CALL == PROCESS_ATTACH; есть ли что-то подобное в Linux?
Это справедливо и для библиотек C. Существует также '__attribute __ ((destructor))' для функции, вызываемой при выгрузке библиотеки –
... и этот атрибут не имеет ничего общего с конструкцией объекта? – einpoklum
@einpoklum, справа, это в основном не связано с построением объекта. Вы можете использовать его в C, который не имеет объектов. Тем не менее, C++ использует это внутренне для вызова конструкторов и деструкторов глобальных объектов. –