GCC n'aime pas #include <linux/sched.h>
Hello,
J'essaye d'utiliser l'appel système sys_clone() et pour cela je dois faire un #include <linux/sched.h>. A la compilation, GCC (que ce soit la version 3.3 ou 4.0) me balance des dizaines de lignes du style :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
In file included from /usr/include/linux/timex.h:58,
from /usr/include/linux/sched.h:10,
from ftpSession.h:20,
from ftpSession.c:10:
/usr/include/linux/time.h:18: error: redefinition of 'struct timeval'
/usr/include/linux/time.h:20: error: syntax error before 'suseconds_t'
In file included from /usr/include/linux/jiffies.h:9,
from /usr/include/linux/sched.h:11,
from ftpSession.h:20,
from ftpSession.c:10:
/usr/include/asm/div64.h:38: error: syntax error before 'long' |
Je précise car on me l'a déjà demandé qu'il ne s'agit pas de module ou du noyau, c'est dans une application perso.
Ce qui me parait vraiment étrange c'est que ces erreurs sont dans des bibliothèques. J'imagine qu'elles ont été testées en long, en large et en travers avant d'être distribuée.
En fouillant sur le web, j'ai trouvé qq posts de gens qui ont eu ce problème, mais pas de solution.
qq a déjà eu ce problème? qq sait comment le résoudre ?
Merci pour votre aide
Re: GCC n'aime pas #include <linux/sched.h>
Citation:
Envoyé par gilux
Je précise car on me l'a déjà demandé qu'il ne s'agit pas de module ou du noyau, c'est dans une application perso.
Ce qui me parait vraiment étrange c'est que ces erreurs sont dans des bibliothèques. J'imagine qu'elles ont été testées en long, en large et en travers avant d'être distribuée.
Tout d'abord, ce ne sont pas des bibliothèques, mais des fichiers d'entête (interfaces de la bibliothèque elle-même). Ensuite, ce ne sont pas n'importe quels fichiers d'entête, il s'agit de fonctions du noyau. Ils ne s'utilisent pas à l'arrache, mais exigent des #define préalables (__KERNEL__, MODULE).
Et c'est là qu'est ton problème... Tu nous dis que tu écris une application perso. Comment se fait-il qu'elle appelle des fonctions du noyau? C'est complétement incorrect, tu casses le modèle en couches sur lequel repose Linux (et la plupart des systèmes d'exploitation modernes). Ton application ne doit appeler que les fonctions de plus haut niveau (comme fork() dans ton cas, je crois).