我有一些非常可爱的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
但没效果。
答案 0 :(得分:6)
LLVM bug 5960表明这个问题是由clang的C99支持与RHEL 5上安装的旧版GNU libc之间的交互引起的。对于我们这些坚持使用RHEL 5的人来说,这是不可能的。将clang -std=c99 -Ox
用于任何x > 0
。
答案 1 :(得分:4)
尝试-std = gnu89;不是很理想,但作为一种解决方法应该足够好。