因为locale为中文导致编译失败

今天尝试在linux下编译xen 3.3.1。到stubdom下面的时候编译newlib失败,找不到stddef.h。何解?自然,我的/usr/include下是有这个文件的,但是由于newlib在编译的时候加了参数-nostdinc,于是在后面采用-isystem include的方式去寻找/usr/include目录。但是出错在于GCC_INSTALL这个变量是空,它是在 stubdom/Makefile 中设置的:

GCC_INSTALL = $(shell LANG=C gcc -print-search-dirs | sed -n -e 's/install: \(.*\)/\1/p')

而实际上,默认情况下我的 gcc -print-search-dirs 输出如下:

安装:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/
程序:=/usr/libexec/gcc/x86_64-redhat-linux/4.1.2/:/usr/libexec/gcc/x86_64-redhat-linux/4.1.2/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/:/usr/lib/gcc/x86_64-redhat-linux/:/usr/libexec/gcc/x86_64-redhat-linux/4.1.2/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/:/usr/lib/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../x86_64-redhat-linux/bin/x86_64-redhat-linux/4.1.2/:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../x86_64-redhat-linux/bin/
库:=/usr/lib/gcc/x86_64-redhat-linux/4.1.2/:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../x86_64-redhat-linux/lib/x86_64-redhat-linux/4.1.2/:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../x86_64-redhat-linux/lib/:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../x86_64-redhat-linux/4.1.2/:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../:/lib/x86_64-redhat-linux/4.1.2/:/lib/:/usr/lib/x86_64-redhat-linux/4.1.2/:/usr/lib/

后面的sed脚本希望看见的是"install"、"program"这样的英文,而不是"安装","程序"。尽管Makefile的作者很有计划的在前面加上了"LANG=C",但是遗憾的是,这不够,还得加上LC_ALL=C。

当看到后面一片片的"expected declaration specifiers or ‘...’ before ‘size_t`"时,谁又能想到是因为locale不是英文呢?叹一下。
p.s.xen最近貌似不出二进制安装包了,只给source code。而centos下的xen还是3.0

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥