Для этого определил функцию _fini:
Код: Выделить всё
extern "C"
void _init ()
{
std::cout << "_init" << std::endl;
};
extern "C"
void _fini ()
{
std::cout << "_fini" << std::endl;
};Компилирую так:
g++ -O2 -shared -fPIC -o libMylib.so Mylib.cpp
или так:
g++ -O2 -shared -fPIC -nostartfiles -o libMylib.so Mylib.cpp
Гружу dlopen'ом.
В итоге, получаю 3 исхода, ни один из которых меня не устраивает:
1. Либа не компилится. ld говорит "множественное определение _init и _fini"
2. С -nostartfiiles либа компилится, но при загрузке оказывается куча undefined reference, которые, как я понимаю, как-раз -nostartfiles'ами и отключились.
3. Если убрать extern "C" в объявлении функции (как, собственно, в Инете и написано), то всё компилится и загружается, но мои функции _init и _fini не вызываются.
Собственно вопрос: как сделать, чтобы вызывались _init и _fini?