IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

executable sans main


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Points : 59
    Points
    59
    Par défaut executable sans main
    Bonjour à tous,
    Je voulais savoir s'il est possible de faire un exécutable en C sans la fonction main ? Merci d'avance

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Pour qu'un processeur exécute une suite d'instructions, il faut lui dire où est la première instruction, c'est entre autres le rôle de la fonction main qui est le point d'entrée. S'il n'y a pas d'instruction à exécuter, on ne peut plus parler d'exécutable. Une librairie n'a pas de fonction main, mais elle n'est pas exécutable, on peut appeler ses fonctions individuellement.

    A+

    Pfeuh

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Tu peux ne pas avoir de fonction qui s'appelle main mais tu dois avoir une fonction de même prototype que main et tu dois dire à ton compilateur que cette fonction est le point d'entrée du programme. D'ailleurs, main c'est juste pour dire par défaut au compilateur "ceci est la fonction principale". Il est très probable que le compilateur génère ensuite un code avec un VRAI point d'entrée reconnu par l'OS cible qui se contentera d'appeler la fonction main. Le prototype de cette fonction n'est pas nécessairement le même que celui de main. Sous certains systèmes par contre, principalement UNIX, le point d'entrée de chaque programme est réellement main donc le compilateur ne fait pas la bidouille que je viens de t'expliquer.

    Il arrive même sous certains environnements que le compilateur exige directement une fonction spécifique différente de main comme point d'entrée au lieu de celle-ci. C'est le cas si tu développes des applications graphiques sous Windows par exemple, où le point d'entrée est une fonction appelée WinMain et non plus main.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Points : 59
    Points
    59
    Par défaut
    Grand merci, je viens de me rendre compte et encore une merci pour vos explications.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 109
    Points
    109
    Par défaut
    Je relance ce fil car en ce moment j apprends a utiliser flex, je suis le manuel et les premiers exemples de fichier a fournir a flex ne definissent pas de fonction main...
    Je suis donc allé voir dans le fichier .c censé contenir le scanner et dans ce cas il ne contient pas non plus de fonction main (en apparrence en tout cas, j ai beau chercher dans les directive #include mais je n en trouve pas la non plus...). Pourtant le programme compile et fournit un executable tout a fait executable.
    Après avoir découvert l option -E de gcc, je ne trouve toujours pas trace de cette satanée fonction main...
    J ai mal cherché ?

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Il s'agit d'un cas particulier. Pour créer un exécutable s'appuyant sur flex, il faut lier (linker) avec la bibliothèque flex (-lfl) qui contient la fonction main.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ nm /usr/lib/x86_64-linux-gnu/libfl_pic.a
     
    libfl_pic_a-libmain.o:
                     U _GLOBAL_OFFSET_TABLE_
    0000000000000000 T main
                     U yylex
    ɹǝsn *sıɹɐlos*

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2005] creer un executable sans .NET
    Par magnus2005 dans le forum Visual C++
    Réponses: 6
    Dernier message: 20/04/2007, 10h10
  2. Executable sans les paquets d'executions
    Par schneed dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/07/2006, 14h22
  3. Débutant Eclipse compilation sans main
    Par Bba_M dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 15/06/2006, 18h28
  4. Débutant Eclipse compilation sans "main"
    Par Bba_M dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 08/06/2006, 21h52
  5. [Système] Lancer un executable sans attendre la fin
    Par raptor70 dans le forum Langage
    Réponses: 1
    Dernier message: 27/10/2005, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo