Per quello che vale, ho avuto lo stesso identico problema con un progetto QT, dove stavo usando un compilatore Linaro per (su entrambi x86 Windows e x86 Linux) build per ARM Linux. Usando lo stesso codice esatto e il file .pro, non ho avuto problemi a costruire su Windows, ma ho avuto una litania di errori nel costruire Linux, a cominciare dallo unknown type name 'size_t'
in libio.h
che risaliva a un #include <stdio.h>
. Ho guardato nello stdio.h
(nel sysroot per l'hardware di destinazione, non sul computer host) e alcune righe in basso erano #include <stddef.h>
(molto prima dello #include <libio.h>
), quindi lo stddef.h
è stato sicuramente incluso. Tuttavia, dopo un'ulteriore ispezione, stddef.h
era completamente vuoto con una dimensione del file di 1 byte. Questo era vero per stddef.h
nel mio sysroot e sul mio computer host. Non ho idea del motivo per cui questi file erano vuoti.
In ogni caso, si è verificato un estraneo INCLUDEPATH += /usr/include/linux
nel mio file .pro. Sul mio computer di compilazione Linux, questo ha aggiunto -I/usr/include/linux
al Makefile generato da qmake. Sul mio computer Windows build, questo ha aggiunto -isystem /usr/include/linux
al Makefile generato da qmake. Una volta commentato, queste linee sono state rimosse dai Makefile e sono state costruite direttamente su entrambe le macchine di compilazione. -isystem /usr/include/linux
a quanto pare non ha mai causato alcun problema sul computer di Windows, quindi non ci sono stati problemi nella rimozione di INCLUDEPATH += /usr/include/linux
.
Non so davvero perché questo ha risolto il problema, ma sospetto che si tratti di una sorta di conflitto tra i file di intestazione. Forse stava mixando i file header dell'host con i file header di sysroot, o creando in qualche modo una dipendenza circolare. La documentazione GCC dice che tutto ciò che è incluso nell'opzione -I
avrà la precedenza su un file di intestazione di sistema. Il mio miglior consiglio per questo problema è dare un'occhiata a quali file di intestazione vengono inclusi e da dove provengono.
Mostra il tuo codice. Non possiamo aiutare senza vedere il tuo codice. –
Se l'errore 'size_t not found' è dal mio codice significa, avrei dovuto' #define size_t unsigned long' per la compilazione temporanea. Ma questo errore proviene da questo file di intestazione di sistema 'libio.h' presente in questo compilatore. – rashok
Si potrebbe anche ottenere il modulo preelaborato con 'gcc -Wall -C -E' e compilare con' gcc -Wall -g -H' per ottenere le intestazioni incluse. E 'libio.h' molto probabilmente non è un'intestazione specifica per il compilatore (ma uno specifico per' libc') –