2011-05-06 92 views
0

我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期间不会调用析构函数,而是在退出时 - 在这段时间内库被卸载。

+0

我还没有看到Linux的这种行为。你能发表一些重现问题的示例代码吗? – 2011-05-06 16:22:31

+0

@Sam。不,我在AIX上看到这一点,而不是在Linux上。我发布了导致问题的隔离块。 – confused 2011-05-06 17:01:28

+0

您可以发布的'application.so'显示问题小例子代码? – 2011-05-09 00:40:57

回答

0

我不使用升压,但我使用AIX 5.3-5,和GCC 4.2.0,并且经历了一个核心转储和

"ld: 0711-224 WARNING: Duplicate symbol: .global constructors keyed to ras_arg_t" 

联动报警。

回答我的问题是ras_arg结构定义之前添加在/usr/include/sys/ras.h

这类似于这里所描述的thread_credentials情况字typedefhttp://www.ibm.com/developerworks/forums/thread.jspa?threadID=119546