2011-09-01 10 views
8

Ho dei codici C99 perfettamente bella che vengono compilati da più file .c, e quando compilo con Clang 2.7, ho un po 'molto strani errori:Come fermare Clang dalla duplicazione delle funzioni nei file di intestazione C standard?

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

Quello che sta succedendo è che l'intestazione GNU libc file per <stdio.h> dichiara alcune funzioni, tra cui putchar, per essere extern __inline__ e, per qualche motivo, clang sta inserendo le definizioni nei file .o. Quindi, quando il linker vede le definizioni duplicate, è un bel lampo.

Sospetto un problema di configurazione: quando uso il clang 2.7 che viene fornito con Debian Lenny, tutto viene compilato. Ma per la classe che sto insegnando, il software deve essere eseguito su Red Hat Enterprise Linux 5 e il mio sysadmin ha creato clang 2.7 dalla sorgente. (Non stiamo usando 2.9 perché non siamo riusciti a compilare hello world, e non useremo una versione successiva perché non abbiamo potuto ottenere l'ultima versione.)

Sto cercando una soluzione alternativa che mi permetterà di compilare. O una opzione da riga di comando o un modo per riconfigurare clang in modo che non faccia questa cosa cattiva.

Ho già provato -U__USE_EXTERN_INLINES senza alcun effetto.

risposta

6

LLVM bug 5960 dimostra che questo problema deriva da un'interazione tra il sostegno C99 del clangore e la vecchia versione di GNU libc che viene installato su RHEL 5. Sembra che per quelli di noi bloccato con RHEL 5, non è possibile utilizzare clang -std=c99 -Ox per qualsiasi x > 0.

4

Prova -std = gnu89; non proprio ideale, ma dovrebbe essere abbastanza buono come soluzione.

+0

Il codice compila, ma diffonde avvisi ovunque. Dal momento che l'intero punto dell'utilizzo di clang invece di gcc è quello di ottenere messaggi di errore migliori, è un progresso in una direzione diversa. Grazie per aver provato. –

+0

+1 in quanto mi ha fornito una soluzione alternativa per i file sorgente 5 C nel nostro software. – Shirkrin

Problemi correlati