我在第三方静态链接库上运行它。我认为,因为它只是一个标题库(某些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()
答案 0 :(得分:1)
这些似乎是微弱的符号。
http://en.wikipedia.org/wiki/Weak_symbol
更新首先,重复的链接器记录不会导致导致 。当编译器使用相同名称的不同符号定义时,它们引起。
所以,简短的回答是:没有 nm
显示这些弱符号不导致或指示ODR违规。但是,这些符号较弱的事实并不意味着也不存在ODR违规。
事实上,我认为完全可能在没有这些符号的情况下发生ODR违规(例如,当由于不同的对齐或打包选项而导致具有相同错位名称的结构的布局不同时)。