2011-09-01 21 views
8

我已經得到了從多個.c文件整理了一些非常可愛的C99代碼,當我與鐺2.7編譯,我得到了一些非常奇怪的錯誤:如何停止Clang在標準C頭文件中複製函數?

/usr/include/bits/stdio.h:77: multiple definition of `putchar' 
a2test.o:/usr/include/bits/stdio.h:77: first defined here 

發生了什麼事是,GNU libc的頭<stdio.h>的文件聲明某些功能(包括putchar)爲extern __inline__,由於某些原因,鐺將定義放入.o文件中。然後,當鏈接器看到重複的定義時,它會褪色。

我懷疑一個配置問題:當我使用Debian lenny附帶的clang 2.7時,一切都會編譯。但對於我正在教授的課程,軟件必須在Red Hat Enterprise Linux 5上運行,而我的系統管理員已經從源代碼構建了clang 2.7。 (我們不使用2.9,因爲我們無法得到它來編譯你好世界,我們不使用更高版本,因爲我們無法獲得最新的構建。)

我要尋找一個解決辦法這將允許我編譯。無論是一個命令行選項或重新配置clang的方式,所以它不會做這件壞事。

我已經試過-U__USE_EXTERN_INLINES沒有效果。

回答

6

LLVM bug 5960顯示此問題是由於clang的C99支持與安裝在RHEL 5上的舊版本的GNU libc之間的交互造成的。對於我們這些堅持使用RHEL 5的人來說,似乎無法使用clang -std=c99 -Ox任何x > 0

4

Try -std = gnu89;不是很理想,但應該足夠好作爲解決方法。

+0

代碼編譯,但到處都噴出警告。由於使用clang而不是gcc的全部目的是爲了獲得更好的錯誤消息,因此這是一個不同方向的進展。感謝您的嘗試。 –

+0

+1,因爲它向我提供了我們軟件中5 C源文件的解決方法。 – Shirkrin