【发布时间】:2012-09-16 09:34:50
【问题描述】:
C++locale.h
->Semantic Issue
-->Use of undeclared identifier 'va_start'
->Semantic Issue
-->Use of undeclared identifier 'va_end'
第一次使用boost,使用ports下载并在XCode中创建了一个命令行项目。 标头搜索路径:/usr/include/**
代码中还没有什么,只是默认项目自带的main函数。
只是不知道该怎么办,没想到会发生这种情况。
编辑1:
第一次出现:
#ifndef _GLIBCXX_CSTDARG
#define _GLIBCXX_CSTDARG 1
#pragma GCC system_header
#include <bits/c++config.h>
#include <stdarg.h>
// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998
#ifndef va_end
#define va_end(ap) va_end (ap)
#endif
_GLIBCXX_BEGIN_NAMESPACE(std)
using ::va_list;
_GLIBCXX_END_NAMESPACE
#endif
这是一个在 \usr\include\c++\4.2.1 中没有扩展名的文件,我刚刚意识到这个文件与 boost 无关,这里发生了一些令人讨厌的事情。
EDIT2:将包含目录修复到 /opt/local/include/** 后出现新错误:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/type_traits:214:46:
Use of undeclared identifier 'nullptr_t'; did you mean 'nullptr'?
还有其他错误,都和sr/lib/c++/v1/文件夹下的这些文件有关,这是为什么?这些文件似乎是一些核心功能,它们不能被破坏。
这是错误的图片,也许你们看到了什么
EDIT3:将编译器从 Apple LLVM 更改为 GCC LLVM 将错误减少到只有一个: “vspintf 不是‘std’的成员”在 c++locale.h 中。好吧,现在我完全迷路了。
【问题讨论】:
-
实际编译/构建时是否出现错误?还是只是来自 Xcode IDE 的警告?
-
首先,您是在 Xcode GUI 中、通过 xcodebuild 还是使用命令行工具链进行构建?你有多个 Xcode 版本吗?安装 MacPorts 后,您是否更改过 Xcode 版本? (我问了最后一个,因为我确实遇到了这个问题——boost 是针对 10.6 SDK 构建的,当我更新 Xcode 时,我不再拥有 10.6 SDK,并且在命令行构建中会导致奇怪的错误,看起来就像你的错误。 )
-
另外,如果您使用的是 clang 而不是 gcc,请确保您没有混合使用 libc++ 和 libstdc++。
-
这是一个错误,它不会完成构建。使用 Xcode IDE 编译。我刚刚安装了 macpors 来安装 boost,它与它们的 xcode 相同。我不知道我在用什么,我认为它是默认编译器(LLVM)
-
刚刚创建了另一个全新的 XCode 命令行工具应用程序。构建 Hello World 时完全没有错误,但只是添加 Header Search Path 会破坏编译并出现上述错误,我的代码中还没有提到 boost,只是添加了搜索路径。