我正在尝试编译一个使用cstdint的应用程序。由于苹果公司已经弃用了gcc,我想尝试使用clang来进行编译,但是我遇到了以下错误:
fatal error: 'cstdint' file not found
我知道gcc 4.6.2版本有-std=c++0x
选项,可以包含该库,但由于os x版本是4.2,所以在这里不太可行。你有什么建议可以帮助我前进吗?我尝试安装4.6.2版本,但在编译一些需要的库之前构建gcc时遇到了各种问题。
我正在尝试编译一个使用cstdint的应用程序。由于苹果公司已经弃用了gcc,我想尝试使用clang来进行编译,但是我遇到了以下错误:
fatal error: 'cstdint' file not found
我知道gcc 4.6.2版本有-std=c++0x
选项,可以包含该库,但由于os x版本是4.2,所以在这里不太可行。你有什么建议可以帮助我前进吗?我尝试安装4.6.2版本,但在编译一些需要的库之前构建gcc时遇到了各种问题。
假设你有这个应用程序的源代码,因此你可以修改头文件以包含正确的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++
。-std=c++11
标志时不使用GCC的C++11实现。也许捆绑的GCC stdlib已经过时了。但是当然,GCC有<cstdint>
。 - Potatoswatterlibc++-dev
来获取开发文件。然后-stdlib=libc++
就可以正常工作了。 - nathancahill