当前位置:  开发笔记 > Android > 正文

_GLIBCXX_USE_C99未定义,to_wstring不可用

如何解决《_GLIBCXX_USE_C99未定义,to_wstring不可用》经验,为你挑选了1个好方法。

我遇到了一个非常严重(IMO)的问题.我在visual studio 2015中使用本机跨平台工具.

由于Visual Studio下载了标准库的几个实现

C:\ ProgramData \微软\ AndroidNDK\Android的NDK-r10e \来源\ CXX-STL \

当我开始寻找没有编译的stl类时,我感到很惊讶.

我注销了std::wstring_convert>不能作为gnu-libstdc ++的怪癖.

我试图将stl设置给其他人,看看他们是否更好.这是在visual studio项目属性窗口中完成的.

在此输入图像描述

没有提供工具集或STL的组合std::wstring_convert>.

我接着说,"如果我必须自己实施这一功能,那么这不是世界末日."

然而不久之后我尝试使用to_wstring.尽管如此wstring,该功能仍未被识别.

这是一个太过分的步骤,所以我检查了gnu-libstdc ++实际上是否实际上已经实现了任何东西.事实上他们,看到了标准的21.5为Y.

我现在很困惑.我做了一些谷歌搜索,发现没有什么比"将它设置为c ++ 11"更重要.

除非Visual Studio没有使用以下设置执行任何操作,否则我假设正在正确调用GCC.

在此输入图像描述

最后我在visual studio中打开了basic_string.h,以确保该函数实际存在.

这是3000行:

inline wstring
to_wstring(int __val)
{ return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(int), L"%d", __val); }

然后我通过阴影看到它被预处理器省略了.看哪,2847行:

#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
     && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))

问题不在于__cplusplus和_GLIBCXX_HAVE_BROKEN_VSWPRINTF._GLIBCXX_USE_C99未定义.

搜索此问题会产生一些堆栈溢出问题.

大多数评论似乎认为问题将通过GCC的新版本来解决.例如GCC 4.4.5.然而,因为visual studio下载了4.9 ...我不认为这只是版本的问题.

我在那里链接到一个三年前的错误报告,其中包含声明:

如果没有针对单个目标的特别努力,就不可能在GCC中修复,这是不会发生的.如果给定目标想要支持C++ 11功能,那么它需要提供必要的C99功能.这不是海湾合作委员会的问题.

嗯,在视觉工作室我已经将C标准设置为C99,因为记录C11没有任何区别.

我真的不确定如何从这里开始.在我看来,某种程度上Visual Studio没有与GCC通信什么是可用的或不可用的.这只是一个理论.

我反对尝试手动更改stl上的分发.这违背了stl的目的.同时,如果没有标准库(考虑到时间限制),我正在进行的这个项目可能是不可能的.我害怕继续,以免由于缺少C库函数而发现隐藏更多关键功能.

我有这种疯狂的希望,我可以在视觉工作室,一些设置或命令行覆盖,以解决这个问题.

PS 我已经研究过在eclipse或android studio中开发android部分.NDK文档经常提到eclipse,但android SDK有关于ADT的可怕消息不再受支持.最重要的是,我开箱即用调试本机代码(但这些超出了范围).android studio构建系统(gradle)至少对自定义文件夹结构似乎不友好.我们所有的资源都在TFS中,此时我无法改变它.



1> Dmitry Moska..:

这是Google的Android NDK的已知问题 - C++标准库在那里被打破,除非你只使用C++的一小部分功能.在GNU libstdc ++构建时(即在Google方面构建NDK时)_GLIBCXX_USE_C99定义(或未定义)宏$NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/$ABI/include/bits/c++config.h.不幸的是,它建立在非常有限的libc(Google的Bionic)之上,因此GNU libstdc ++配置脚本会检测它并禁用某些部分(特别是std::to_wstring),具体取决于libc中缺少的功能.

这是我开始使用CrystaX NDK的主要原因之一- 适用于Android的替代原生开发套件.在CrystaX NDK中,我们特别注意libc,libstdc ++的完整性以及对标准的一致性.CrystaX NDK可以作为谷歌Android NDK的直接替代品,因此很可能它也只适用于Visual Studio.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有