On Wed, Sep 20, 2000 at 02:20:37PM +0400, Eugene Karpachov wrote: > > 3. Библиотека динамически загружает библиотеку от interbase6.0.1 (взят в > > rpm-ке с родного сайта) все работает, после выхода из тестовой программы > > (уже к этому времени сделано dlclose), получаю seg. fault. С > > библиотеками от sybase 11.0.3 все нормально. Если не использовать > > динамическую > > загрузку то завершение нормальное. Может кто-нибудь сталкивался с таким > > явлением или может объяснить его причины? > > Это, возможно, известная дырка в компиляторе. Если библиотека от interbase > (или вообще, та, на которую вызван dlclose) написана на C++ и содержит > локальные статические объекты с деструктором, типа > > void f() > { > static A some_static_var; > // ... > } > > - то при завершении всего процесса будет плохо, так как рантайм планирует эти > деструкторы по atexit(), а в момент вызова код уже отсутствует в адресном > пространстве процесса (dlclose()). То же самое будет, если вообще какой-нибудь > код в dlclose()-нутой библиотеке запланирован на atexit(). Это, повторяю, > известная ошибка/особенность.
Спасибо за информацию. Я думаю врядли из тех *.so хотя бы часть написана на С++, но в исходниках InterBase код, запланированный на выход. Получается что atexit() и on_close() привязывается именно к main() или ехit() и в случае с *.so это будет привязка к основной программе? И dlclose() эту привязку не снимает и поэтому я получаю SF? Печально -- Best regards, Sergey Chumakov 2:450/77[.43]