PDA

Afficher la version complète : Problème avec GCC



Agemen
26/10/2007, 17h10
J'ai un petit problème avec mon compilateur sous linux. Quand je veux compiler un programme qui ne contient pas de fonction main, il me renvoie une erreur.
J'ai notamment édité un fonction de saisie de tableau. Donc je fais un fichier .c, dans lequel j'écris ma fonction appelée, disons, saisie. Je tape mon code, je tente de compiler, et là : erreur. Par contre, sir je remplace saisie par main, là ça marche...

PS : je vais aller chercher l'erreur que le compilateur me renvoie... je l'ai oubliée, mais je sais que c'est important pour comprendre^^

Pumpkin
26/10/2007, 17h12
Hello !

C'est normal. Il s'agit non-pas d'une erreur de compilation, mais une erreur à l'édition des liens (je pense)

Tu as en fait découvert le problème toi-même.

Agemen
27/10/2007, 18h06
Qu'est-ce que tu entends par "tu as découvert le problème toi même"? Je suis pas censé écrire un éxécutable sans fonction main à l'intérieur? Je reboot sous linux (pb de carte wifi^^) et je poste l'erreur...

Pumpkin
27/10/2007, 18h18
Arf.
Je ne savais pas que c'était possible de rendre un .cpp exécutable sans fonction main. Autant pour moi.
:huh:

Agemen
27/10/2007, 18h27
Ben je suis pas sur... en fait, je fais un fichier de bibliothèque pour un prog plus long, je sais pas si j'ai besoin de rendre le fichier exécutable... je crois pas, je dois m'arrêter avant l'édition de lien, il me semble (en fait pour moi c'est une grande première^^). Je vous file le log :


Using built-in specs.
Target: i586-suse-linux
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.2.1 --enable-ssp --disable-libssp --disable-libgcj --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --program-suffix=-4.2 --enable-version-specific-runtime-libs --without-system-libunwind --with-cpu=generic --host=i586-suse-linux
Thread model: posix
gcc version 4.2.1 (SUSE Linux)
/usr/lib/gcc/i586-suse-linux/4.2.1/cc1 -quiet -v tritab.c -quiet -dumpbase tritab.c -mtune=generic -auxbase tritab -version -o /tmp/ccmRtpEV.s
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc/i586-suse-linux/4.2.1/include
/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/include
/usr/include
End of search list.
GNU C version 4.2.1 (SUSE Linux) (i586-suse-linux)
compiled by GNU C version 4.2.1 (SUSE Linux).
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64353
Compiler executable checksum: d37fc6ca38af22df55d43dce99bbeccf
/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/bin/as -V -Qy -o /tmp/cc8Nt1sj.o /tmp/ccmRtpEV.s
GNU assembler version 2.17.50 (i586-suse-linux) using BFD version (GNU Binutils) 2.17.50.20070726-14 (SUSE Linux)
/usr/lib/gcc/i586-suse-linux/4.2.1/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i586-suse-linux/4.2.1/../../../crt1.o /usr/lib/gcc/i586-suse-linux/4.2.1/../../../crti.o /usr/lib/gcc/i586-suse-linux/4.2.1/crtbegin.o -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../.. /tmp/cc8Nt1sj.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i586-suse-linux/4.2.1/crtend.o /usr/lib/gcc/i586-suse-linux/4.2.1/../../../crtn.o
/usr/lib/gcc/i586-suse-linux/4.2.1/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status

ça vous parle plus qu'à moi?

Pumpkin
27/10/2007, 18h32
/usr/lib/gcc/i586-suse-linux/4.2.1/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'Je maintiens ce que j'ai dit. Il n'y a pas d'entrée dans ton programme, donc, gcc ne peut pas le rendre exécutable. Il ne sait pas quelles sont les premières instructions à exécuter lorsque tu démarreras le programme.
:rolleyes:

Edit : De là, il doit y avoir moyen simplement d'effectuer un contrôle syntaxique. Mais je ne sais point (en créant un main vide)

Agemen
28/10/2007, 22h44
Ok, je m'inquiète plus alors^^. En fait, ce fichier sera dans une librairie (dynamique ou non), l'exécutable est ailleurs. Je voulais juste vérifier mon programme
merci pour tout!!

Pumpkin
28/10/2007, 23h09
Ceci pourra t'intéresser :
http://www.trustonme.net/didactels/154.html

Et jette un coup d'œil sur ton moteur de recherche préféré avec bibliothèque statique et dynamique.