[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: C++ ?



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]



Reply to: