libc – 停止std重命名为std :: __ 1?
作者:互联网
经过大量努力,让clang和libc编译,运行,与NetBeans集成,甚至交叉编译到32位机器,我想我已经弄明白了!所以我去使用libstdc没有的一些功能(将我的开发环境颠倒过来的全部原因),并发现……我实际上无法做到这一点.
安装了libc,它工作,并且编译的程序(当它工作时)确实需要它.但是,编译器仍然试图通过搞乱命名空间来抓住每个机会使用libstdc版本; std :: __ 1 :: map,std :: __ 1 :: basic_string,依此类推.现在,我从this question知道为什么会发生这种情况,以及为什么libc会这样做.我只需要知道如何删除它,因为它完全不适用 – 我真的,确实想要使用libc版本,我的代码中没有任何东西需要两种类型共存.
我已经尝试从包含路径中取出libstdc文件夹,并且失败了,这使得它们完全无法访问.没运气.我没有使用任何附加库,只使用内置的Linux / POSIX头文件(errno,socket,syslog,fcntl).
编辑:错误消息:
CoreCache.cpp:61:12: error: no member named 'emplace' in 'std::__1::map<std::__1::basic_string<char>, CacheEntry, std::__1::less<std::__1::basic_string<char> >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char>, CacheEntry> > >'
libstdc映射没有emplace(). libc版本可以.
从命令行调用以下似乎有效:
clang++ -o stachecache -I /usr/local/lib/clang/3.1/include/ -I /usr/include/c++/v1/ -std=c++0x -stdlib=libc++ ./*.cpp
NetBeans中的调用不会:
clang++ -stdlib=libc++ -O3 -c -O3 -Werror -MMD -MP -MF build/Release/clang-Linux-x86/CoreCache.o.d -o build/Release/clang-Linux-x86/CoreCache.o CoreCache.cpp
解决方法:
来自评论:
araqnid:
Your NetBeans invocation doesn’t have-std=c++0x
, is it not needed?std::map::emplace
is a C++11 method.DigitalMan (OP):
@araqnid That actually did it! Clang complained about that argument being unused – and still does, in fact, even when it’s used and required – so I had taken it out of the NetBeans configuration. A faulty warning is better than a complete error, certainly.
标签:c,clang,std,libc-2 来源: https://codeday.me/bug/20190929/1831459.html