2009-05-16 6 views
9

Quando provo aGCC problema build (limits.h #include_next)

$ make depend -f gcc.mak

un middleware sulla mia macchina Ubuntu ho questa

/usr/include/../include/limits.h:125:26: error: no include path in which to search for limits.h

Questo è il contenuto di tutto limits.h: 125 :

 
/* Get the compiler's limits.h, which defines almost all the ISO constants. 

    We put this #include_next outside the double inclusion check because 
    it should be possible to include this file more than once and still get 
    the definitions from gcc's header. */ 
#if defined __GNUC__ && !defined _GCC_LIMITS_H_ 
/* `_GCC_LIMITS_H_' is what GCC's file defines. */ 
# include_next <limits.h> 
#endif 

ho provato a installare

 
$ export INCLUDE=/usr/lib/gcc/x86_64-linux-gnu/4.3/include-fixed/ 
$ export C_INCLUDE_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.3/include-fixed/ 
$ export CPLUS_INCLUDE_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.3/include-fixed/ 

(che è dove ho trovato un altro limits.h sul mio sistema). Ho già installato libc6-dev, potrebbe essere che i suoi limiti.h siano stati sovrascritti da un altro pacchetto? Ho bisogno di un altro pacchetto -dev? O è richiesta una variabile di ambiente; forse questo potrebbe essere aggirato in qualche altro modo?

+0

Questo dovrebbe funzionare così com'è. Cosa vedi quando aggiungi '-v' al tuo comando di compilazione? –

+0

Suppongo che limit.h sia mancante (o sovrascritto). -v get me GNU Make 3.81 Destinazione: x86_64-linux-gnu gcc versione 4.3.3 (Ubuntu 4.3.3-5ubuntu4) –

+0

L'altro limits.h che puoi trovare è quello che dovrebbe essere tirato da include_next . È possibile aggiungere -v alla riga di comando gcc che esegue la compilazione in errore, ad esempio gcc -v -c foo.c? La parte interessante nella sua uscita sarebbe # include <...> ricerca inizia qui: /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.3.3/include /usr/lib/gcc/x86_64-linux-gnu/4.3.3/include-fixed /usr/include Fine della lista di ricerca. –

risposta

1

il pacchetto di cui avete bisogno è glibc.

+0

Sembra giusto. Lo contrassegnerò come soluzione, anche se non l'ho verificato. –

+0

Ho glibc e ancora ottengo questo errore. – Reinderien

+1

Sto cercando di compilare per Android (quindi non glibc in quanto tale) e ottengo anche questo errore. Non riesco a scoprire quale intestazione dovrei includere. – Wyatt8740

0

Considerare l'utilizzo di #include_next <limits.h> (estensione gcc) per forzare gcc a esaminare il successivo risultato limits.h nel percorso di inclusione (che dovrebbe essere la copia del toolset).

+0

Non ho altri limiti (ragionevoli). Ho bisogno dei limiti GCC.h. Quello in inclusione fissa sembra ... spento. –

0

Non ricordo più esattamente la risoluzione, ma ha avuto a che fare con qualche pacchetto mancante. Dopo aver acquisito un po 'di roba, apt ha funzionato per me.

2

Avevo affrontato il mio problema con la compilazione di STLport 5.1.5, ma sembra che il problema sia risolto è STLport 5.2.0. Il problema è documentato in STLport Release Notes. Dopo aver ottenuto una copia di STLport 5.2.1, la compilazione è andata a buon fine senza intoppi.

2

Ho riscontrato questo problema durante una compilazione incrociata. Quando si esegue un 'fanno dipendere' il Makefile invocherà il programma makedepend come si vede da questo incarico:

MAKEDEPPROG=makedepend 

makedepend cerca solo un po 'di default includono directory che iniziano con /usr/include

Poiché la direttiva #include_next significa per includere il l'istanza successiva trovata del file di inclusione denominato nel percorso di ricerca, non funzionerà se non ne viene trovata un'altra.

Per me, la soluzione era di indirizzare makedepend per cercare prima le mie directory di includere il cross-compilatore. Ho fatto questo modificando l'assegnazione MAKEDEPPROG per includere la direttiva -I:

MAKEDEPPROG=makedepend -I < path/to/cross-compiler/include-fixed > 

vi suggerisco di leggere sul programma makedepend (di cui non sapevo nulla prima). Ad esempio, non era ovvio per me che makedepend non avrebbe usato un percorso di ricerca di ambiente. La direttiva -I inserisce il percorso di ricerca specificato prima dei percorsi predefiniti di makedepend.