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

  1. #1
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Mon programme "Hello world" ne link pas : "final link failed: Operation not supported"
    Bonjour, je viens de commencer à apprendre le C et premier programme le plus basique possible mais cela ne compile pas…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <stdio.h>
     
    int main(){
      printf("Hello world\n");
      return 0;
    }
    Après avoir essayé de lancer la compilation : gcc -o first.exe first.c, j'ai la magnifique erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /usr/bin/ld: final link failed: Operation not supported
    collect2: error: ld returned 1 exit status
    Je ne pense pas que cela soit dû à mon code vu la simplicité de celui-ci et je sais que le problème vient du linker, mais bon : je ne sais quand même pas quoi faire. Si vous pouviez m'aider, ce serait cool.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    septembre 2007
    Messages
    7 195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 195
    Points : 22 966
    Points
    22 966
    Par défaut
    Bonjour et bienvenue,

    Tu n'as pas de chance. Surtout avec un « hello world » qui, lui, est effectivement écrit dans les règles de l'art…
    Il semblerait qu'il s'agisse d'un bug rare mais déjà ancien, et ce que j'ai pu en lire jusqu'ici ne présentait que des solutions de contournement au cas par cas.

    Quelle plateforme utilises-tu pour développer ? Travailles-tu avec une vieille distribution de Linux, avec un CygWin ou avec les implémentations de Windows 10 ?

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    7 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 7 825
    Points : 21 397
    Points
    21 397
    Billets dans le blog
    1
    Par défaut
    Bonjour

    De mon côté, avec une distrib ubuntu sur laquelle je suis en ce moment, j'ai fait exactement comme toi et ça a marché.

    En plus des infos demandées par Obsidian, il faudrait que tu nous donnes ta version de gcc => gcc --version

    Petit détail (qui n'entre pas en ligne ici mais que tu dois connaitre), sous Linux il n'y a pas besoin d'extension ".exe" pour un exécutable.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    mai 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Simple question : tu n'es pas sur un environnement virtualisé par hasard (VMware, WorkStation, ...) ?

  5. #5
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    deja merci de vos réponses (pour le .exe je suis aller faire un tour sur des sites montrant ça comme ça, dans le doute j'ai essayé bref)
    Je tourne sur Kali linux basé sur Debian 9.2.1 avec gcc 9.2.1 le tout installer sur une machine 32bits

  6. #6
    Expert éminent
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    3 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 3 228
    Points : 7 261
    Points
    7 261
    Par défaut
    Je peux me tromper mais cela sent la compilation en 32 bits et l'édition des liens en 64 bits. D'où l'opération non supportée.

    Il faut regarder la version des bibliothèques que tu as installé (32 ou 64) voire la version de ton gcc (idem) et "mettre tout à niveau"

  7. #7
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par foetus Voir le message
    Je peux me tromper mais cela sent la compilation en 32 bits et l'édition des liens en 64 bits. D'où l'opération non supportée.

    Il faut regarder la version des bibliothèques que tu as installé (32 ou 64) voire la version de ton gcc (idem) et "mettre tout à niveau"
    Ok, sur tes conseils j'ai vérifié et gcc est bien en i686 mais je n'arrive pas a voir pour le linker ça ne s'affiche pas avec un: ld -v

  8. #8
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    encore merci à tous, j'ai trouvé la solution, enfin non plus exactement : j'ai relancé la commande et je ne sais pas par quelle sorcellerie c'est possible mais ça marche nickel je passe donc la discussion en resolu

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    7 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 7 825
    Points : 21 397
    Points
    21 397
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par iSeaox_ Voir le message
    encore merci à tous, j'ai trouvé la solution, enfin non plus exactement : j'ai relancé la commande et je ne sais pas par quelle sorcellerie c'est possible mais ça marche nickel
    Hum... je sens comme une espèce de collision foireuse avec un vieux ".o" résiduel qui aurait été utilisé par le linker à la place du source montré dans ce post. Ou alors un truc qui traine dans /tmp et fout la zone quand tu tentes de compiler. Puis tu rebootes ta machine (ce qui purge /tmp) et là tu compiles et ça marche...

    PS: est-ce que par hasard tu bosses sous root ?
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  10. #10
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    PS: est-ce que par hasard tu bosses sous root ?
    Oui, je sais que c'est pas l'ideal mais ça ne m'a causer aucun problème pour l'instant, pourquoi ?

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    septembre 2007
    Messages
    7 195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 195
    Points : 22 966
    Points
    22 966
    Par défaut
    Citation Envoyé par iSeaox_ Voir le message
    Oui, je sais que c'est pas l'ideal mais ça ne m'a causer aucun problème pour l'instant, pourquoi ?
    Si tu travailles sous Unix ou ses dérivés, il faut prendre d'emblée l'habitude de ne pas le faire.

    « root » n'est pas une sorte « power user » comme sous Windows. C'est plutôt une sorte de compte « technique ». Le fait d'en faire un utilisateur à part entière permet à la fois de largement simplifier les choses au niveau de la conception du système et de servir de fait « d'interface utilisateur ». Mais pour le reste, il y a un seul root, l'utilisateur avec l'identifiant « 0 », et tous les autres sont des utilisateurs ordinaires.

    Lorsque tu travailles en root, TOUTES les restrictions au niveau du système sont levées, y compris les systèmes de sécurité, jusqu'au l'exécution en mode privilégié sur le micro-processeur. Par défaut, les logiciels « système » et les services, qui ont une portée globale et qui doivent être accessibles à tout moment par tous les utilisateurs, fonctionnent en root… à condition de ne pas pouvoir faire autrement. Quand ils peuvent rendre ces mêmes services sans avoir besoin de privilèges, on les lance sous une identité qui correspond en fait à un utilisateur ordinaire. Il s'agit généralement d'un « pseudo-user » mais sous Unix, cette distinction est purement politique (par exemple, on décide que tous les UID inférieurs à 500 ou à 1000 serviront à ce type d'utilisateurs), mais pas technique.

    En outre, beaucoup d'adaptations sont faites pour que tu puisses utiliser root pour dépanner un système qui ne fonctionne plus en conditions normales. Par exemple, « /home », qui contient les répertoires personnels de tous les utilisateurs, est généralement monté sur une partition distincte, qui peut être facilement sauvegardée ou construite d'une façon particulière (en RAID, par exemple). Cela fait que l'on trouve tous les répertoires personnels au même niveau : « /home/pierre », « /home/jacques », « /home/paul », etc.

    À l'inverse, le home de root est généralement placé sur la partition qui contient la racine « / », donc « /root ». C'est volontaire, car cela permet justement de se loguer très tôt après le démarrage, c'est-à-dire quand le système arrive à booter, mais ne peut plus aller plus loin. Ça lui permet entre autre de pouvoir manuellement monter ou démonter la partition /home. C'est utile également quand le système utilise un système d'authentification tiers qui ne marche ou alors quand on a oublié le fichier /etc/nologin…

    A contrario, un système ouvert en root est extrêmement vulnérable : il suffit de taper « rm -rf / » pour effacer la totalité des volumes montés (système et répertoires utilisateur). Autre cas, l'espace disque : les partitions sont généralement configurées pour se déclarer pleines dès que l'espace disque tombe en dessus d'un certain pourcentage (5%, 1%… on a tendance à réduire ce seuil au fur et à mesure que les volumes grandissent). Un script qui devient fou et blinde un fichier de log ne fera que peu de dégats s'il fonctionne avec une identité normale : on ne pourra plus écrire mais il restera toujours un fond de roulement minimum pour que le système puisse fonctionner). Si tu fais la même chose sous root, ton script aura le droit de consommer cet espace de sécurité et le fera en plus sur la partition système.

    Côté utilisateur maintenant : si tous les utilisateurs sont a priori « égaux » sous Unix quand on les crée, il est extrêmement facile de leur accorder tous les privilèges que l'on souhaite et dont on a besoin pour travailler au quotidien : nul besoin de les faire rentrer dans des classes prédéfinies comme il en existait sous Windows. En principe, sous Unix, « tout est fichier », y compris les « fichiers spéciaux » et les partitions virtuelles comme « /proc », si bien que donner un droit d'accès à telle ou telle ressource matérielle est aussi simple que donner un droit d'accès à un fichier ordinaire. Bon, c'est de moins en moins vrai avec les distributions récentes et avec les projets de bureau (Freedesktop, le projet GNOME, etc) qui font du libre, mais qui n'ont pas spécialement décidé de s'appuyer sur le modèle Unix.

    Enfin, il faut se souvenir qu'il est très simple de lancer un logiciel sous une identité donnée dans un shell Unix sans avoir à fermer et rouvrir une session. C'est à ça que sert la commande « su » (Substitute User) et la plupart des gens utilisent en fait aujourd'hui « sudo » pour lancer au cas par cas une commande avec l'identité root par défaut (sinon n'importe quel autre utilisateur) et continuer à travailler en conditions normales à côté.

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    7 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 7 825
    Points : 21 397
    Points
    21 397
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par iSeaox_ Voir le message
    Oui, je sais que c'est pas l'ideal mais ça ne m'a causer aucun problème pour l'instant, pourquoi ?
    En plus de l'excellente explication d'Obsidian, il faut te souvenir que tu bosses aussi pour les autres. Même si t'es seul, ta philosophie de dev Linux est (ou devrait être, ou "devra" être si demain tu bosses en équipe) que tes programmes doivent être utilisables par tout user. C'est à dire qu'ils doivent prendre en compte et gérer les soucis de droits d'accès ou autre. Et si tu bosses sous root, tes soucis éventuels seront masqués par tes droits privilégiés mais que les autres n'auront peut-être pas.

    C'est tellement préconisé de partout de ne jamais bosser sous root que certains services et/ou outils refusent carrément d'être lancé sous root. Par exemple Apache, le serveur web, dans lequel tu peux paramétrer son uid et gid, refuse de se lancer si son uid est à 0. Et (autre exemple) le shell "/bin/bash" détecte un setuid positionné et désactive son effet au lancement (j'ai découvert ça il y a 15 jours quand j'ai voulu faire un TP sur le setuid avec un groupe que je dirigeais => j'ai pris /bin/bash comme exemple et ça n'a pas marché ; puis j'ai pris /bin/sh et là c'était bon)

    Et accessoirement si j'ai posé la question, c'est parce que j'avais l'intuition que cette habitude avait ici peut-être eu un impact sur tes soucis de compilation...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

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

Discussions similaires

  1. Programme "hello world" qui ne fonctionne pas
    Par Glork dans le forum Android
    Réponses: 8
    Dernier message: 14/12/2013, 19h35
  2. mon applet HELLO WORLD ne marche pas
    Par freddy000 dans le forum NetBeans
    Réponses: 22
    Dernier message: 19/11/2010, 20h48
  3. Réponses: 0
    Dernier message: 10/04/2008, 01h45
  4. Réponses: 18
    Dernier message: 19/04/2007, 18h42
  5. [C++] Hello world ne compile pas
    Par thargos dans le forum C++
    Réponses: 9
    Dernier message: 25/09/2006, 19h45

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