【问题标题】:boost:asio and dlclose() - core dump (illegal instruction)boost:asio 和 dlclose() - 核心转储(非法指令)
【发布时间】: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


【解决方案1】:

我没有使用 boost,而是使用 AIX 5.3-5 和 gcc 4.2.0,并且经历了核心转储和

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

联动警告。

我的问题的答案是在/usr/include/sys/ras.h 中的ras_arg 结构定义之前添加单词typedef

这类似于此处描述的thread_credentials 案例: http://www.ibm.com/developerworks/forums/thread.jspa?threadID=119546

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多