У меня есть application.so в Aix 5.3 и gcc 4.2.4.Application.so использует boost: asio.Есть example.c, который делает dlopen и dlclose для application.so.Однако при выходе из example.c я получаю дамп ядра.Обратите внимание, что все операции выполнены успешно.
Если я закомментирую код, связанный с boost, в application.so и по-прежнему буду ссылаться на boost_system.so при сборке application.so, я получу дамп ядра при выходе из example.c.Однако, если я не связываю boost_system.so при создании application.so, я не получаю дамп ядра при выходе из example.c.
Я пробовал boost_1_40, boost_1_42, boost_1_45 и gcc 4.2.0.Кто-нибудь видел эту проблему раньше.Если да, любая помощь будет принята с благодарностью.
{
hLib = dlopen(libPath, RTLD_LAZY | RTLD_GLOBAL);
fprintf(stderr, "Before dlclose");
dlclose(hLib);
}
Над сегментом, где проблема возникает.Как только выход из example.c завершается, я получаю дамп ядра.
EDIT
При сборке application.so с boost-system я получаю следующие предупреждения: -
ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::error_info_injector<boost::system::system_error>::~error_info_injector
ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >::~clone_impl()
ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >::~clone_impl()
ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >::clone() const
ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >::rethrow() const
ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::error_info_injector<boost::system::system_error>::~error_info_injector::system_error> >::~clone_impl()
ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system:
ld: 0711-224 WARNING: Duplicate symbol: .non-virtual thunk to boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >::~clone_impl()
ld: 0711-224 WARNING: Duplicate symbol: .global destructors keyed to ras_arg_t
ld: 0711-224 WARNING: Duplicate symbol: .global constructors keyed to ras_arg_t
Я предполагаю, что эти дублирующие деструкторы не получаютвызывается во время dlclose, но во время выхода - когда библиотека выгружается.