gpt4 book ai didi

c++ - Boost.Exception 符号出现在 'nm' 输出中是什么意思?它们会导致 ODR 违规吗?

转载 作者:行者123 更新时间:2023-11-28 06:34:17 33 4
gpt4 key购买 nike

我在第 3 方静态链接库上运行它。我认为因为它是一个仅包含 header 的库(某些 MSVC 版本除外),所以它不会出现。也许我误解了 nm 应该显示的内容。我真正想知道的是,如果我链接到使用不同版本的 Boost 编译的库,它们是否会导致 ODR 违规。

查看输出:http://codepad.org/kJ86hiQg

一个简短的采样:

    W boost::exception_detail::clone_base::~clone_base()
W boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::runtime_error> >::~clone_impl()
W boost::exception_detail::cloning_base::~cloning_base()
W boost::exception_detail::counted_base::~counted_base()
W boost::exception::~exception()

最佳答案

这些似乎是弱符号。

http://en.wikipedia.org/wiki/Weak_symbol


更新 ODR 违规首先不是由重复的链接器记录引起的。当编译器使用相同名称的符号的不同定义时,它们引起

因此,简短的回答是: nm 显示这些弱符号不会导致或指示 ODR 违规。然而,这些符号弱的事实并不意味着不存在 ODR 违规。

事实上,我认为在没有此类符号的情况下,完全有可能在翻译单元中出现 ODR 违规(例如,当由于不同的对齐方式或包装选项而导致具有相同损坏名称的结构的布局不同时)。

关于c++ - Boost.Exception 符号出现在 'nm' 输出中是什么意思?它们会导致 ODR 违规吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27004563/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com