首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost库和应用程序中不同的C++损坏名称

Boost库和应用程序中不同的C++损坏名称
EN

Stack Overflow用户
提问于 2020-12-10 05:37:27
回答 2查看 55关注 0票数 1

我正在macos中编译HPX (一个高性能计算库),它使用的是Boost。我使用clang 10和meson作为构建系统。使用nm转储库和应用程序二进制文件来检查符号,我发现它们之间有一个字母的差异。作为我学习之路的开始,我正在构建的应用程序是官方文档中的HPX hello world示例。

libboost_filesystem-mt.dylib中,符号是__ZN5boost10filesystem6detail28directory_iterator_constructERNS0_18directory_iteratorERKNS0_4pathEjPNS_6system10error_codeE

在应用程序中,它是__ZN5boost10filesystem6detail28directory_iterator_constructERNS0_18directory_iteratorERKNS0_4pathEPNS_6system10error_codeE

唯一不同的是,在libboost_filesystem-mt.dylib中,在损坏名称的path部分后面添加了一个j字符。为什么会发生这种情况,我能做些什么?这超出了我的知识范围,任何帮助都将深表感谢。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-12-10 05:52:58

根据优秀的https://demangler.com/,这些定义中的第一个是:

_boost::filesystem::detail::directory_iterator_construct(boost::filesystem::directory_iterator&,boost::filesystem::

路径常量&,无符号整数,boost::system::error_code*)

第二个是:

_boost::filesystem::detail::directory_iterator_construct(boost::filesystem::directory_iterator&,boost::filesystem::path const&,

boost::system::error_code*)

现在您可以看到,第一个版本中的区别是一个额外的unsigned int参数。我不知道为什么会这样,但这可能会给你一些关于发生了什么的线索。

票数 2
EN

Stack Overflow用户

发布于 2020-12-10 08:02:23

谢谢你们。我能够看到,在c++filt的帮助下,这些符号确实指向了directory_iterator的两个不同的构造函数。然后,我检查了HPX源代码,发现在一个源文件中只有两个地方实例化了迭代器。我更改了代码,向构造函数添加了一个boost::system::error_code变量,现在它工作得很好。由于新的unsigned int参数是中间参数,因此将错误代码变量添加到构造函数可以消除它的歧义。下面是它现在的用法:

代码语言:javascript
复制
boost::system::error_code dir_ec;
for (fs::directory_iterator dir(libs_path, dir_ec); dir != notier; ++dir) {...}

我将在GitHub的项目中打开一个拉取请求。这是一个非常好的HPC库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65225280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档