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 :

[GCC] Librairie dynamiques et statiques


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [GCC] Librairie dynamiques et statiques
    Bonjour,

    Je ne pensais pas me prendre la tête avec un truc aussi bête alors je demande de l'aide via ce forum Je suis sous Debian et j'utilise GCC. J'ai créé des librairie statiques pour un projet via la commande "ar". J'ai écrit un programme qui utilise ma suite de librairie statique ainsi qu'OpenGL et d'autre libs utiles (pthread, Cg, ...) et donc lorsque j'ai un problème lors du link. Soit je link avec la commande du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -L../lib -lmyLib -lGL -o libTest libTest.o
    Or dans ce cas il me dit qu'il ne peut trouver -lmyLib1 car vu que c'est des librairies statiques elles ont l'extention .a (libmyLib.a) et non .so. J'ai donc mi sle flag -static, mais là il ne me trouve plus -lGL puisqu'elle est en .so elle... J'ai donc essayer la combinaison de -static et de -dynamic au cas où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -L../lib -static -lmyLib -dynamic -lGL -o libTest libTest.o
    Mais cela ne fonctionne pas non plus (en fait je m'y attendais ). Il me dit toujours qu'il ne peux trouver -lGL. Je pourrais compiler mes librairies en dynamique, mais je préfèrerais qu'elles soient statiques (pour la portabilitée) et à l'inverse, je veux garder des librairies en dynamique pour ne pas que ce soit trop lourd.

    Ma question est donc simple : comment fait-on pour linker à la fois des librairies statiques et des librairies dynamique à un excutable ?


    Merci d'avance pour votre aide


    EDIT : Je suis allé un peu vite en fait. Lorsque je ne met pas le -static, il ne me trouve pas de référence vers la fonction définie dans mylib. Peut-être un problème de librairie donc. Je recherche sur cette piste.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Ordre des arguments de la ligne de commande
    MDR !

    Bon j'ai trouvé la solution à mon problème en fait. Effectivement il était très con J'avais du mal à comprendre pourquoi un truc aussi simple ne fonctionnait pas puisque les librairies statiques sont simplement un groupement de fichier .o

    La solution à mon problème réside dans l'ordre des argument de la ligne de commande gcc. Je m'en sert souvent et pourtant je n'ai jamais eu ce problème. Seulement je viens de lire que les options de link se mettent après le fichier à construire. Pas besoin de -static ou de -dynamic car elles servent à forcer l'utilisation des librairies statiques/dynamiques comme je le pensais. En somme voici à quoi ressemble ma commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -o libTest libTest.o -L../lib -lmyLib -lGL
    Tout connement Des fois je me trouve stupide -_- Ce quie me tue c'est que ça fait maintenant un moment que je code, mais je n'ai jamais eu ce problème. C'est surement parce que c'est la première fois que je compile des lib statiques. Vu que c'est des .o elle doivent être placer avec les autres fichiers objets à compiler. Ce problème ne se produit apparament pas lorsqu'il s'agit de librairie dynamique, mais je me trompes peut-être.

    Bon et bien j'ai fait les questions et les réponses. Si d'autres font la même erreur que moi, ça leur servira

    A+

  3. #3
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    Oui en fait il faut mettre la librairie qui contient la définition d'une fonction à droite du fichiers qui l'utilise:

    The traditional behavior of linkers is to search for external functions from left to right in the libraries specified on the command line. This means that a library containing the definition of a function should appear after any source files or object files which use it
    http://www.network-theory.co.uk/docs...cintro_18.html

  4. #4
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut .so = shared object
    Citation Envoyé par CKaiser Voir le message
    Ce problème ne se produit apparament pas lorsqu'il s'agit de librairie dynamique, mais je me trompes peut-être.
    Tu te trompes : il n'existe pas de "bibliothèques dynamiques", mais des .so = shared object = fichier objet partagé (ou partageable si tu préfères - moi oui).

    En gros, .so = .o linkable par ld.so.

    Il n'y a pas de ".sa", ça serait une contradiction.

    Comme il ne s'agit pas de bibliothèque dynamique, le problème des bibliothèques ne risque pas de se poser.

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

Discussions similaires

  1. Lier des librairies dynamiques et statiques, utilisation de CMake
    Par lhareen dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 08/07/2020, 18h30
  2. GCC - Link librairie dynamique et statique
    Par cnicolot dans le forum C++
    Réponses: 4
    Dernier message: 20/05/2011, 10h47
  3. librairies dynamiques ou statiques ?
    Par _Michel dans le forum Visual C++
    Réponses: 2
    Dernier message: 05/03/2008, 14h17
  4. Réponses: 3
    Dernier message: 21/11/2007, 08h32
  5. Recompiler une librairie dynamique (DLL) en statique
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 07/04/2005, 19h28

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