Rechercher : dans
Par :

[c] Cygwin : problème de compilation (fork)

Dernière réponse le 17 sep 2007 à 09:33:13 Fab, le 15 oct 2006 à 13:39:32 
 Signaler ce message aux modérateurs

Bonjour,

Je viens d'installer Cygwin et je rencontre un problème de compilation avec le programme en C qui suit :

#include <unistd.h>
#include <sys/types.h>

int main (int argc, char ** argv) 
{	pid_t p = fork(); 	return 0; }



Le compilateur me retourne l'erreur : Undefined reference to `fork`.

Est-ce que quelqu'un sait d'où peut provenir cette erreur ?

Fab

Meilleures réponses pour « [c] Cygwin : problème de compilation (fork) » dans :
La compilation et les modules en C et en C++ Voir Cet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Compiler du C sous Linux/UNIX VoirSous Linux, le compilateur de C est gcc. Il est installé de base sur plusieurs distributions, mais sur Debian (et celles qui en découlent) il faudra l'installer (aptitude install gcc). gcc Syntaxe de GCC gcc Tout d'abord, il faut savoir...
Compiler un programme en C avec Dev C++ sous Vista VoirIl est très probable que vous ayez des problèmes lors de la compilation d'une source C sous Vista avec Dev C++. Solution rapide de secours: le compilateur g++ Voici une astuce pour Dev-Cpp : Aller dans "Outils" -> "Options du compilateur" puis...
Que fait un fork() ? Voir...ou le petit fork() illustré.... Introduction Lancement du père Le fork Maîtriser le fil d'exécution du père et celui du fils Les variables et les descripteurs de fichiers La synchronisation La fin Notes et...

1

Char Snipeur, le 15 oct 2006 à 23:27:25

Je pense que c'est le lieur qui renvoi l'erreur. à vérifier.
Si quand tu tape gcc -c [nom prog] {autres option}
il n'y a pas d'erreur. C'est bien un problème de liaison.
dans ce cas, il faut ajouté la bonne bibliothèque (connait pas, dsl)
sinon, vérifie bien que fork est déclarer dans tes includes. Salutation !
Char Snipeur

Répondre à Char Snipeur

2

Fab, le 16 oct 2006 à 13:19:01

> C'est bien un problème de liaison.

oui en effet il s'agit d'un problème de liaison...

> il faut ajouté la bonne bibliothèque

normalement j'ai ajouté le header <unistd.h> alors ça devrait fonctionner, il me semble...

Fab

Répondre à Fab

3

Char Snipeur, le 16 oct 2006 à 13:34:14

Ba voila. LE problème est cerné.
le fait d'inclure <*.h> ne suffit pas.
En effet dans ces fichiers il n'y a que la déclaration de fork

int fork(void);

tu imagine bien que si il y avait l'implémentation complete, tu ne pourrai utiliser le fork que dans un seul fichier source. Ce qui est restrictif.
Pour éviter cela, fork est implémenter dans un fichier source, et compilé. Ces fonctions compilé courante sont regroupé dans des fichiers bibliothèque de nom "lib[corps].a". pour les appeler lors du link, il faut fair :
ld ... -l[corps]
par exmple pour openGL, tu as libopengl32.a, et tu l'apel avec -lopengl32
le include <gl.h> ne suffit pas.
Pour ton problème, par contre, je ne sais pas ou est situé fork. Surment dans une lib* proche du .h
Bonne chance Salutation !
Char Snipeur

Répondre à Char Snipeur

4

mamiemando, le 16 oct 2006 à 16:05:46

En ce qui me concerne (sous linux) la version

#include <unistd.h>
#include <sys/types.h>

int main (int argc, char ** argv) {
  pid_t p = fork();
  return 0;
}

... compile parfaitement. Je pense que ta libc a un problème, tu devrais la réinstaller.

Bonne chance

Répondre à mamiemando

6

Fab, le 16 oct 2006 à 20:04:30

D'après toi la librairie requise est libc.a or il se trouve que j'ai déjà ce fichier dans mon répertoire /lib/ et ça ne compile pas malgré tout.

J'ai essayé avec l'option gcc -l libc.a mais il me retourne une erreur selon laquelle la libraire n'a pas été trouvée.

:(

Fab

Répondre à Fab

8

Char Snipeur, le 17 oct 2006 à 16:23:53

C'est :
gcc -lc
qu'il faut taper.
ça résoudra pas ton problème, mais ça peut te servir dans la suite.
Pour résumé, fork se trouverai dans la libc standard.
Donc, si il ne le trouve pas, il faut trouver une autre lib qui contient fork(). Salutation !
Char Snipeur

Répondre à Char Snipeur

9

Fab, le 18 oct 2006 à 07:48:56

Ah oui d'accord: je comprends mieux maintenant.

Merci pour ces précisions !

Fab

Répondre à Fab

5

Fab, le 16 oct 2006 à 19:27:10

Merci pour vos réponses !

> je ne sais pas ou est situé fork. Surment dans une lib* proche du .h

Je n'ai pas trouvé la libraire en question, et je ne connais pas un moyen de la trouver. Tout ce que je sais, c'est que la fonction dont j'ai besoin - fork() - est définie dans <unistd.h>.

Le programme de test fonctionne bien sous linux, je suis simplement déçu de ne pas réussir à le faire fonctionner sous cygwin !

Je reste avec mon erreur : undefined reference to `fork` ...

Fab

Répondre à Fab

7

mamiemando, le 17 oct 2006 à 08:58:32

Je suis tombée sur ça :
http://www.mail-archive.com/cygwin-cvs@cygwin.com/msg02907.h­tml
As-tu essayé de mettre à jour ton cygwin ?

Je ne sais pas si ça règlera ton problème

Répondre à mamiemando

10

 Tarboeuf, le 17 sep 2007 à 09:33:13

Je reviens sur le probleme, mais je pense qu'en rajoutant -lcygwin dans la ligne de l'éditeur de liens suffit car un grand nomre de fonctions son présente dans cette librairie.

Répondre à Tarboeuf