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.
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. –
+1 in quanto mi ha fornito una soluzione alternativa per i file sorgente 5 C nel nostro software. – Shirkrin