Clang OS X Lion,找不到cstdint

agm*_*eod 18 macos gcc clang

我正在尝试编译一个使用cstdint的应用程序.既然Apple弃用了gcc,我想尝试用clang编译它,但是我得到了错误:

fatal error: 'cstdint' file not found
Run Code Online (Sandbox Code Playgroud)

我知道gcc 4.6.2版本可以选择-std=c++0x包含库,但是因为os x版本是4.2,所以这里没有多少选择.关于我如何前进的任何建议?我曾尝试安装4.6.2,但在构建gcc之前编译一些所需的库时遇到了各种各样的问题.

wkl*_*wkl 18

据推测,你有这个应用程序的源代码,所以你可以修改标题以包含正确的cstdint标题,因为Clang 3.0(Lion的工具附带)确实有标题.

快速解决方案

标题位于tr1目录下,因此您需要执行以下任一操作:

#include <tr1/cstdint>
Run Code Online (Sandbox Code Playgroud)

要么

#include <stdint.h> // which will use the C99 header
Run Code Online (Sandbox Code Playgroud)

更长,更无聊的解释

在做了一些额外的阅读之后,我记得你可以在没有tr1目录的情况下做到这一点:

默认情况下,您将包含来自/usr/include/c++/4.2.1GNU GCC标头的C++标头./usr/include/c++/4.2.1/tr1包括TR1头文件,如cstdint.

另一种方法是使用Clang ++前端进行编译并传递-stdlib=libc++标志,该标志将使用来自/usr/include/c++/v1Clang的C++标头实现的标头.它有cstdint.

例:

// file called example.cxx
#include <tr1/cstdint>

int main() {
    // whatever...
}
Run Code Online (Sandbox Code Playgroud)

用以下内容编译:

g++ example.cxx
Run Code Online (Sandbox Code Playgroud)

要么

clang++ example.cxx
Run Code Online (Sandbox Code Playgroud)

它会做你想要的.

如果您不想使用该tr1版本(大致相同,如果不完全相同):

// file called example.cxx
#include <cstdint>

int main() {
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

这是这样编译的:

clang++ -stdlib=libc++ example.cxx
Run Code Online (Sandbox Code Playgroud)

虽然你使用-stdlib=libc++,但这意味着你要链接到Clang的C++库libc++,而不是GCC libstdc++.

  • 我在Ubuntu 14.04上遇到这个错误,我不得不安装`libc ++ - dev`来获取开发文件.然后`-stdlib = libc ++`工作正常. (2认同)