> 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(). Это, повторяю, известная ошибка/особенность. Обходных путей два: один - не вызывать dlclose(), второй - линковать библиотеку линковщиком, а не грузить динамически. -- jk