如何解决`std::basic_string` 和 `std::__1::basic_string` 有什么区别?
ninja
(版本:1.9.0)输出:
mergetree_test.cpp:(.text+0x19f): undefined reference to `DB::executeQuery(std::string const&,DB::Context&,bool,DB::QueryProcessingStage::Enum,bool)'
nm -A mergetree_test.o | grep executeQuery | c++filt
输出:
mergetree_test.o: U DB::executeQuery(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const&,bool)
但是我从链接库中获得了输出,其中 executeQuery
使用相同的方法定义。
libdbms.a:executeQuery.cpp.o:0000000000008750 T DB::executeQuery(std::__1::basic_string<char,std::__1::char_traits<char>,std::__1::allocator<char> > const&,bool)
__1
是什么意思?我该如何解决问题?
解决方法
我怀疑您正在尝试组合使用 libc++ 和 libstdc++ 编译的库。
libc++ 将(几乎)所有符号放入 std::_1::
,而 libstdc++ 将其符号放入 std::
你问了两个问题,所以我要回答主要问题(__1
是什么?):
__1
是位于 std
中的内联命名空间:
namespace std
{
inline namespace __1
{
// string,...
}
}
inline
意味着不必指定结构/函数/变量位于该命名空间中,因此可以简单地使用 std::string
而不是 std::__1::string
。
至于为什么会出现错误:如果您不提供一些代码,我们无法知道。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。