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

Autres éditeurs Discussion :

Lier une lib avec GCC?


Sujet :

Autres éditeurs

  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut Lier une lib avec GCC?
    Je compile une bibliothèque en librairie static windows (.lib) avec le compilateur Intel (ICL) compatible avec Visual.
    Cette librairie contient des fonctions avec interface C (extern "C").

    Etant donné que la librairie est nettement plus rapide une fois compilée avec ICL qu'avec GCC, je me dis que ça serait bien de faire l'édition de lien de cette lib pour un programme compilé avec GCC.
    Mais GCC compile les bibliothèque dans un fichier.a

    Je sais qu'il n'est pas possible de lier des fonction C++.
    Est-ce quand-même possible pour les fonctions C avec un GCC sous Cygwin ou Linux?

    J'espère mais je ne me fais pas trop d'illusions...

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Indique lui la bibliothèque en inscrivant son nom complet au lieu du traditionnel -lquelquechose
    Maintenant, ce n'est pas sûr que cela marche à cause du format des fichiers compilés qui est différent entre GCC et d'autres compilateurs

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Je sais qu'il n'est pas possible de lier des fonction C++.
    !!!???
    Tu veux dire que le extern "C" empêche ça ?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    GCC et ICL ne décorent pas les fonctions de la même manière, donc pas de fonctions C++ partageables.

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    GCC et ICL ne décorent pas les fonctions de la même manière, donc pas de fonctions C++ partageables.
    Effectivement. J'avais fais des essais y'a un peu plus d'un an pour lier une bibliothèque (compilée avec ICL) avec Visual C++. Je n'avais alors réussi que pour des fonctions extern "C".

    Indique lui la bibliothèque en inscrivant son nom complet au lieu du traditionnel -lquelquechose
    Maintenant, ce n'est pas sûr que cela marche à cause du format des fichiers compilés qui est différent entre GCC et d'autres compilateurs
    J'aurais dû essayer avant de demander.
    Voilà, j'ai essayé de lier MABIB.LIB avec GCC sous Cygwin et ça marche pas, il fallait probablement s'y attendre.

    J'obtiens tout plein d'erreurs du genre:
    -local symbol `.lf' has no section
    -Warning: .drectve `-defaultlib:libcpmt ' unrecognized*
    -In function `blabla': undefined reference to `blablabla'

    Si quelqu'un connait une raison (ou mieux une solution), je suis preneur.

    J'ai peut-être une idée:
    Dans le passé j'avais compilé une bibliothèque C avec GCC sous Cygwin. J'avais récupéré tous les fichiers objets ".o" pour les réunir dans une librairie statique ".lib" grâce au programme xlib livré avec Visual.
    Peut-être que je pourrait faire l'inverse: récupérer les objets ".obj" et les réunir en une librairie ".a".
    Comment donc GCC procède t-il pour réunir les ".o" dans une librairie?

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Non, ça ne marchera pas, c'est le problème que j'ai indiqué Le format des fichiers compilé n'est pas le même. Par exemple, GCC retourne du code ELF, pas Visual - on peut exécuter la sortie d'une compilation GCC sans faire d'édition des liens, pas avec un fichier objet de Visual -.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    L'outil reimp.exe de MinGW peut (quand il le veut bien) convertir des .lib en .a.

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Je viens d'utiliser reimp, mais j'ai exactement les mêmes nombreuses erreurs qu'avant:
    -local symbol `.lf' has no section
    -Warning: .drectve `-defaultlib:libcpmt ' unrecognized*
    -In function `blabla': undefined reference to `blablabla'

    C'est comme si reimp.exe ne faisait rien.
    Ca marche peut-être que pour du C?

    Voici ma façon de procéder, ai-je procéder aux bonnes étapes?
    reimp.exe imp.lib -> création des fichiers obj constituant imp.lib, mais aucun libimp.a créé
    ar rcs libma.a *.obj -> création de libimp.a
    gcc -limp ...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut
    Salut !

    Voilà la méthode que j'utilise pour créer des *.a à partir d'un *.lib avec reimp :

    Avec l'invite de commande, il faut se placer dans le dossier du fichier *.lib

    Ensuite, exemple pour moi (en fonction de la localisation de reimp.exe) :

    c:\tools\mingw\bin\reimp.exe --dlltool "c:\tools\mingw\bin\dlltool.exe" --as "c:\tools\mingw\bin\as.exe" fichier.lib

    Et normalement un fichier *.a est créé dans le même dossier que le fichier *.lib

    ++

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    J'ai essayé avec les options que tu me donnes, mais ça change rien: toujours pas de libfichier.a mais des fichiers objets.

    Et même quand les paramètres de ces options ne désignent pas les 2 bon exécutables, reimp ne s'en offusque pas...

    J'ai pas installé MinGW, mais j'ai Cygwin (j'ai jamais vraiment compris la différence). j'avais téléchargé reimp.exe que j'ai copié dans le /bin de cygwin.
    Et voilà ce que je rentre en ligne de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     reimp --dlltool "/cygdrive/c/cygwin/bin/dlltool.exe" --as "/cygdrive/c/cygwin/bin/as.exe" fichier.lib
    Pourtant avec l'option '-d', reimp affiche à l'écran toutes les fonctions contenues dans la lib.

    Des idées?

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut
    Re !

    Et avec les chemins complets, tu as essayé ?

    ++

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Je crois que j'ai tout essayé.
    J'ai même copié les 3 éxécutables dans le répertoire courant.
    J'ai même essayé avec 2 libs non compilées par moi, mais livrées avec VC.

    Tu utilises bien le reimp livré dans le packet mingw-utils-0.3?

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut
    C'est le reimp de Mingw mais par contre je ne sais pas dans quel packet il était livré. Ce n'est pas moi qui l'ai installé .

    Je peux juste te dire que dans le même dossier que "reimp.exe", il y a un "dlltool.exe", un "as.exe", "gcc.exe", "gdb.exe", "mingw32-gcc.exe"

    Le compilateur utilisé est mspgcc (gcc pour µC MSP430). J'espère que ces indications vont t'aider.

    Je vais demander à celui qui l'a installé mais je ne le revois que vendredi...

    Bon courage.

    ++

  14. #14
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Merci beaucoup. J'attendrai, pas de problème.
    Je suis maintenant à court d'idées.
    Je me doutais bien qu'utiliser une lib de Visual avec GCC était plutôt incertain.

Discussions similaires

  1. linker avec une lib de gcc
    Par uriotcea dans le forum C++Builder
    Réponses: 7
    Dernier message: 04/04/2008, 11h19
  2. faire une lib avec BC++
    Par traiangueul dans le forum C++Builder
    Réponses: 2
    Dernier message: 05/10/2006, 11h07
  3. Comment Integré une lib avec VS2005?
    Par ekinox17 dans le forum MFC
    Réponses: 23
    Dernier message: 13/02/2006, 08h51
  4. Réponses: 4
    Dernier message: 26/09/2005, 14h27
  5. Réponses: 5
    Dernier message: 26/05/2005, 15h40

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