我正在尝试编译一个使用cstdint的应用程序。由于Apple弃用了gcc,我想尝试用clang编译它,但是我得到了错误:
fatal error: 'cstdint' file not found
我知道gcc 4.6.2版本可以选择-std=c++0x
来包含库,但由于os x版本是4.2,所以这里没有多少选择。关于我如何前进的任何建议?我曾尝试安装4.6.2,但在构建gcc之前编译一些所需的库时遇到了各种各样的问题。
答案 0 :(得分:18)
据推测,你有这个应用程序的源代码,所以你可以修改标题以包含正确的cstdint
标题,因为Clang 3.0(Lion的工具附带)确实有标题。
标题位于tr1
目录下,因此您需要执行以下任一操作:
#include <tr1/cstdint>
或者
#include <stdint.h> // which will use the C99 header
做了一些额外的阅读,因为我记得你可以在没有tr1目录的情况下做到这一点:
默认情况下,您将包含来自/usr/include/c++/4.2.1
的C ++标头,这些标头是GNU GCC标头。 /usr/include/c++/4.2.1/tr1
包含TR1标头文件,例如cstdint
。
另一种方法是使用Clang ++前端进行编译并传递-stdlib=libc++
标志,该标志将使用来自/usr/include/c++/v1
的标头,这些标头是Clang的C ++标头实现。它有cstdint
。
示例:
// file called example.cxx
#include <tr1/cstdint>
int main() {
// whatever...
}
用以下内容编译:
g++ example.cxx
或
clang++ example.cxx
它会做你想做的事。
如果您不想使用tr1
版本(大致相同,如果不完全相同):
// file called example.cxx
#include <cstdint>
int main() {
// stuff
}
这是这样编译的:
clang++ -stdlib=libc++ example.cxx
虽然如果你使用-stdlib=libc++
,这意味着你要链接到Clang的C ++库libc++
,而不是GCC的libstdc++
。