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

时间:2011-09-01 21:33:59

标签: 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

正在发生的事情是<stdio.h>的GNU libc头文件将某些函数(包括putchar)声明为extern __inline__,并且由于某种原因,clang将定义放入{{1}文件。然后,当链接器看到重复的定义时,它会变暗。

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

我正在寻找一个允许我编译的解决方法。无论是命令行选项还是重新配置clang的方式,所以它不会做坏事。

我已经尝试.o但没效果。

2 个答案:

答案 0 :(得分:6)

LLVM bug 5960表明这个问题是由clang的C99支持与RHEL 5上安装的旧版GNU libc之间的交互引起的。对于我们这些坚持使用RHEL 5的人来说,这是不可能的。将clang -std=c99 -Ox用于任何x > 0

答案 1 :(得分:4)

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