如何阻止Clang复制标准C头文件中的函数?

如何阻止Clang复制标准C头文件中的函数?,clang,glibc,Clang,Glibc,我有一些非常可爱的C99代码,它们是从多个.c文件编译而来的,当我使用Clang 2.7编译时,我会遇到一些非常奇怪的错误: /usr/include/bits/stdio.h:77: multiple definition of `putchar' a2test.o:/usr/include/bits/stdio.h:77: first defined here 所发生的事情是,的GNU libc头文件将某些函数(包括putchar)声明为extern\uuuuu inline\uuuu,出

我有一些非常可爱的C99代码,它们是从多个.c文件编译而来的,当我使用Clang 2.7编译时,我会遇到一些非常奇怪的错误:

/usr/include/bits/stdio.h:77: multiple definition of `putchar'
a2test.o:/usr/include/bits/stdio.h:77: first defined here
所发生的事情是,
的GNU libc头文件将某些函数(包括
putchar
)声明为
extern\uuuuu inline\uuuu
,出于某种原因,clang正在将定义放入
.o
文件中。然后,当链接器看到重复的定义时,它会发出呜咽声

我怀疑有一个配置问题:当我使用Debian lenny附带的clang 2.7时,一切都可以编译。但是对于我正在教授的课程,软件必须运行在Red Hat Enterprise Linux 5上,我的系统管理员已经从源代码构建了clang 2.7。(我们没有使用2.9,因为我们无法编译hello world,也没有使用更高版本,因为我们无法获得最新版本。)

我正在寻找一个解决办法,将允许我编译。要么是命令行选项,要么是重新配置clang的方法,这样它就不会做坏事


我已经尝试了
-U\U使用外部内联线,但没有效果。

Try-std=gnu89;虽然不是很理想,但作为一种解决方法应该足够好。

LLVM表明,这个问题是由于clang的C99支持与RHEL 5上安装的旧版本GNU libc之间的交互造成的。似乎对于我们这些坚持使用RHEL 5的人来说,不可能对任何
x>0
代码编译使用
clang-std=c99-Ox
,但会到处发出警告。由于使用clang而不是gcc的全部目的是获得更好的错误消息,因此它朝着不同的方向发展。感谢您的尝试。+1,因为它为我提供了在我们的软件中解决5C源文件的方法。