Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[gcc] parse errors

4 réponses
Avatar
gg
Bonjour,

j'essaye de compiler un source en c avec gcc founit par Cygwin.
Malheureusement, j'obtiens pas mal de "parse errors" sur des noms de
variables contenant des underscores "_" dans les fichiers "include" de base
(par ex: __gid32_t dans socket.h).

Auriez-vous une idée de comment résoudre ce pb ? Est-il lié à des librairies
qu'il faudrait inclure ? des options à préciser dans gcc ?

Merci d'avance de votre aide,

gg

4 réponses

Avatar
Vincent Lefevre
Bonjour,

Dans l'article <46102c92$0$25926$,
gg écrit:

j'essaye de compiler un source en c avec gcc founit par Cygwin.
Malheureusement, j'obtiens pas mal de "parse errors" sur des noms de
variables contenant des underscores "_" dans les fichiers "include" de base
(par ex: __gid32_t dans socket.h).

Auriez-vous une idée de comment résoudre ce pb ? Est-il lié à des librairies
qu'il faudrait inclure ? des options à préciser dans gcc ?


On n'inclut pas une librairie, mais un en-tête. Ces "parse errors"
indiquent probablement quelque chose qui n'est pas défini. Cela peut
être un #include manquant, ou un -std avec une mauvaise valeur dans la
ligne de commande de gcc, ou des variables d'environnement incorrectes
(comme CPATH ou C_INCLUDE_PATH).

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
espie
In article <46102c92$0$25926$, gg wrote:

Bonjour,

j'essaye de compiler un source en c avec gcc founit par Cygwin.
Malheureusement, j'obtiens pas mal de "parse errors" sur des noms de
variables contenant des underscores "_" dans les fichiers "include" de base
(par ex: __gid32_t dans socket.h).

Auriez-vous une idée de comment résoudre ce pb ? Est-il lié à des librairies
qu'il faudrait inclure ? des options à préciser dans gcc ?


C'est pas un probleme d'underscore, c'est un probleme de source non portable.

De ce que tu dis, c'est du source prevu pour un linux ou assimile qui se
contente d'inclure socket.h tout seul. Manque de bol, il faut aussi
inclure types.h pour que ca marche... C'est un gros classique:
types.h contient les typedef qui vont bien, ceux-ci sont isoles dans un
__machin (style __gid32_t) pour eviter que ca soit visible dans le code
utilisateur, puis socket.h s'en sert, soit pour definir des structures,
soit pour rendre le typedef visible.

Il y a deux ecoles: ceux qui pensent que tous les entetes doivent etre
auto-suffisants, et les autres... je fais plutot partie des autres, pour
m'etre fait mal au crane a essayer de rendre exactement visible ce qui
doit l'etre dans des entetes C ISO.

Bref, remplace ton
#include <sys/socket.h>
par un
#include <sys/types.h>
#include <sys/socket.h>
et ca devrait resoudre CE probleme-la.

Mais bon, la route a des chances d'etre longue et difficile. Si tu es
bloque sur un petit truc relativement basique en essayant de compiler
un programme pas vraiment porte sur un systeme qui se prend pour un unix
mais sans plus, tu peux t'attendre a avoir d'autres problemes plus
subtils a resoudre...

Avatar
gg
"Marc Espie" a écrit dans le message de news:
eupd35$65$
In article <46102c92$0$25926$, gg
wrote:

Bonjour,

j'essaye de compiler un source en c avec gcc founit par Cygwin.
Malheureusement, j'obtiens pas mal de "parse errors" sur des noms de
variables contenant des underscores "_" dans les fichiers "include" de
base
(par ex: __gid32_t dans socket.h).

Auriez-vous une idée de comment résoudre ce pb ? Est-il lié à des
librairies
qu'il faudrait inclure ? des options à préciser dans gcc ?


C'est pas un probleme d'underscore, c'est un probleme de source non
portable.

De ce que tu dis, c'est du source prevu pour un linux ou assimile qui se
contente d'inclure socket.h tout seul. Manque de bol, il faut aussi
inclure types.h pour que ca marche... C'est un gros classique:
types.h contient les typedef qui vont bien, ceux-ci sont isoles dans un
__machin (style __gid32_t) pour eviter que ca soit visible dans le code
utilisateur, puis socket.h s'en sert, soit pour definir des structures,
soit pour rendre le typedef visible.

Il y a deux ecoles: ceux qui pensent que tous les entetes doivent etre
auto-suffisants, et les autres... je fais plutot partie des autres, pour
m'etre fait mal au crane a essayer de rendre exactement visible ce qui
doit l'etre dans des entetes C ISO.

Bref, remplace ton
#include <sys/socket.h>
par un
#include <sys/types.h>
#include <sys/socket.h>
et ca devrait resoudre CE probleme-la.

Mais bon, la route a des chances d'etre longue et difficile. Si tu es
bloque sur un petit truc relativement basique en essayant de compiler
un programme pas vraiment porte sur un systeme qui se prend pour un unix
mais sans plus, tu peux t'attendre a avoir d'autres problemes plus
subtils a resoudre...


Merci pour la réponse.
sys/types.h est en fait inclus juste au dessus.

En fait la question sous-jacente est : est-il possible de compiler un source
linux pour windows via Cygwin ?

gg


Avatar
Vincent Lefevre
Dans l'article <4610ca61$0$27367$,
gg écrit:

En fait la question sous-jacente est : est-il possible de compiler
un source linux pour windows via Cygwin ?


Tout dépend du source, e.g. s'il n'utilise que des fonctionnalités
POSIX, ou s'il utilise des spécificités de Linux.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)