Forum Programmation.c++ Problème compilation: undefined reference to `main'

Posté par  .
Étiquettes : aucune
0
12
déc.
2005
J'ai un problème de compilation avec g++ (aussi gcc).

Mon programme est divisé en plusieurs fichiers et chaque fichier contient une classe. J'aimerais pour chaque classe créer un fichier objet .o et puis assembler le tout avec le main.

Exemple:
Fichier Point2D.cpp:
#include <stdio.h>
#include "Point2D.h"
Point2D::Point2D() {
}
Point2D::Point2D(double xval, double yval) {
x=xval;
y=yval;
}
void Point2D::toString() {
printf("Point2D(%f, %f)", x, y);
}


J'essaie de le compiler comme ceci:

$ g++ -ggdb -D_GNU_SOURCE -Wall -lgd -lpng -lz -ljpeg -lfreetype -lm -o Point2D.o Point2D.cpp
/usr/lib/gcc/i386-redhat-linux/4.0.2/../../../crt1.o(.text+0x18): In function `_start':
: undefined reference to `main'
collect2: ld a retourné 1 code d'état d'exécution
make: *** [Point2D] Erreur 1


Par contre si je compile tous les fichiers en une seule passe ça marche:

$ g++ -ggdb -D_GNU_SOURCE -Wall -lgd -lpng -lz -ljpeg -lfreetype -lm -o contour Point2D.cpp DoubleArray2D.cpp Contour.cpp main.cpp
$


J'aimerais éviter d'avoir à recompiler tous les fichiers sources si je n'en modifie qu'un seul. Comment dois-je m'y prendre?

Merci d'avance.


J'en profite pour poser une autre question: existe-t-il un équivalent à Javadoc pour le C++ ? Quelles sont les solutions disponibles?
  • # De mémoire

    Posté par  . Évalué à 5.

    Je n'ai pas la page de man facilement accessible, mais il me semble que pour transformer un .cpp en .o, c'est l'option -c qu'il faut utiliser, pas -o.

    man gcc devrait aider, si c'est dispo.
    • [^] # Re: De mémoire

      Posté par  . Évalué à 1.

      ca m'a bien l'air d'être ca:

      -c
      Compile or assemble the source files, but do not link. The compiler output is an object file corresponding to each source file.

      Merci, je testerai chez moi.
  • # Makefile

    Posté par  . Évalué à 4.

    La compilationde Point2D.cpp ne peux pas fonctionner parce que g++ attend une fonction main.
    Ce que tu désires, c'est compiler Point2D.cpp en tant qu'objet pour être ensuite utilisable dans main.cpp. Pour faire ca, il faut ajouter l'option -c lors de la compilation de Point2D.cpp

    Enfin l'idéal est de construire un Makefile. Avec un tel fichier et la commande make, tu ne compileras que les fichiers modifiés.
  • # doxygen

    Posté par  . Évalué à 7.

    J'en profite pour poser une autre question: existe-t-il un équivalent à Javadoc pour le C++ ? Quelles sont les solutions disponibles?

    Si je me souviens bien de ce qu'est javadoc, un équivalent est doxygen (www.doxygen.org).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.