我application.so在AIX 5.3和gcc 4.2.4。 Application.so使用boost:asio。有example.c,它为应用程序提供了dlopen和dlclose。但是,当example.c退出时 - 我得到一个核心转储。请注意,所有操作都已成功执行。升压:ASIO和dlclose() - 核心转储(非法指令)
如果我在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退出,我会得到核心转储。
编辑
当升压系统建设application.so,我得到以下警告: -
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
我假设这些DUPL在dlclose期间不会调用析构函数,而是在退出时 - 在这段时间内库被卸载。
我还没有看到Linux的这种行为。你能发表一些重现问题的示例代码吗? – 2011-05-06 16:22:31
@Sam。不,我在AIX上看到这一点,而不是在Linux上。我发布了导致问题的隔离块。 – confused 2011-05-06 17:01:28
您可以发布的'application.so'显示问题小例子代码? – 2011-05-09 00:40:57