【发布时间】:2012-10-27 07:22:04
【问题描述】:
我在 Aix 5.3 和 gcc 4.2.4 上有 application.so。 Application.so 使用 boost:asio。有 example.c 为 application.so 执行 dlopen 和 dlclose。但是,当 example.c 退出时 - 我得到一个核心转储。请注意,所有操作均已成功执行。
如果我在 application.so 中注释掉与 boost 相关的代码,并且在构建 application.so 时仍然链接 boost_system.so,我仍然会在退出 example.c 时获得核心转储。但是,如果我在构建 application.so 时不链接 boost_system.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 退出,我就会得到核心转储。
编辑
使用 boost-system 构建 application.so 时,我收到以下警告:-
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 期间被调用,而是在退出期间被调用 - 到那时库被卸载。
【问题讨论】:
-
我在 Linux 上没有看到这种行为。你能发布一些重现问题的示例代码吗?
-
@Sam。不,我在 AIX 而不是 Linux 上看到了这个。我已经发布了导致问题的隔离块。
-
你能发布一个
application.so的最小示例代码来显示问题吗?
标签: boost boost-asio aix coredump