Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Invité régulier
    Inscrit en
    décembre 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 45
    Points : 7
    Points
    7

    Par défaut compilation g++, question

    Bonjour,

    j'ai écris une librairie en c++ avec des classes aux fonctions privées et publiques.
    Des fonctions privées font appel à des librairies. Et les fonctions publique sont une sorte de wrapper aux fonctions privées
    La compilation de la librairie se passe sans problème
    g++ -fPIC....
    g++ shared, soname....


    Mais lorsque j'essaye de compiler un programme utilisant ma librarie,
    cela ne fonctionnera que si je lui indique ou trouver les librairies qui sont utilisées que dans les fonctions privées de mes classes....

    Comment faire du coup pour faire en sorte que seulement les fonctions publique soit accessible, depuis un programme tier ?

    L'utilisation de "extern C" aiderai elle ? je ne l'utilise pas car le programme appelant est aussi en c++

    je précise que les structures/objet spécifiques aux autres librairies ne sont jamais utilisées dans les méthodes publiques....


    merci pour vos réponses

  2. #2
    Expert Confirmé Sénior

    Inscrit en
    novembre 2005
    Messages
    5 104
    Détails du profil
    Informations forums :
    Inscription : novembre 2005
    Messages : 5 104
    Points : 5 985
    Points
    5 985

    Par défaut

    Quand tu batis ta bibliotheque, indiques les bibliotheques dont elle depend avec -l.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Invité régulier
    Inscrit en
    décembre 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 45
    Points : 7
    Points
    7

    Par défaut

    Bonjour,

    C'est en effet ce que je fais, lorsque je batis ma librairie j'indique les librairies nécessaire avec le -l

    Ce que j'aimerais c'est que lorsque je construis mon appli utilisant ma librairie je n'ai pas besoin d'indiquer le -l des autres librairies

  4. #4
    Expert Confirmé Sénior

    Inscrit en
    novembre 2005
    Messages
    5 104
    Détails du profil
    Informations forums :
    Inscription : novembre 2005
    Messages : 5 104
    Points : 5 985
    Points
    5 985

    Par défaut

    Bizarre:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ g++ -fPIC -c lib1.cpp
    $ g++ -fPIC -c lib2.cpp
    $ g++ -c main.cpp
    $ g++ -shared -o liblib2.so lib2.o
    $ g++ -shared -o liblib1.so lib1.o
    $ g++ -o main main.o -L`pwd` -llib1
    liblib1.so: undefined reference to `f2()'
    collect2: ld returned 1 exit status
    $ g++ -shared -o liblib1.so lib1.o -L`pwd` -llib2
    $ g++ -o main main.o -L`pwd` -llib1
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Invité régulier
    Inscrit en
    décembre 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 45
    Points : 7
    Points
    7

    Par défaut

    Pourquoi

    $ g++ -shared -o liblib1.so lib1.o

    te compiles bien alors qu'elle devrait dépendre de liblib2 et donc devrais nécessiter -llib2 ?

  6. #6
    Invité régulier
    Inscrit en
    décembre 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 45
    Points : 7
    Points
    7

    Par défaut

    Maybe my problem is a little bit different...it's more like this :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    $ g++ -fPIC -c lib1.cpp
    $ g++ -c main.cpp
    $ g++ -shared -o liblib1.so lib1.o -L`pwd` -llib2
    $ g++ -o main main.o -L`pwd` -llib1
    liblib1.so: undefined reference to `struct specific_to_lib2'
    collect2: ld returned 1 exit status
    $ g++ -o main main.o -L`pwd` -llib1 -llib2 -> fine

  7. #7
    Expert Confirmé Sénior

    Inscrit en
    novembre 2005
    Messages
    5 104
    Détails du profil
    Informations forums :
    Inscription : novembre 2005
    Messages : 5 104
    Points : 5 985
    Points
    5 985

    Par défaut

    Tu peux extraire un exemple complet? Je ne me souviens pas avoir vu une erreur du genre: undefined reference to `struct specific_to_lib2'
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #8
    Invité régulier
    Inscrit en
    décembre 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 45
    Points : 7
    Points
    7

    Par défaut

    Le message n'indique pas d'erreur sur `struct specific_to_lib2'
    mais sur `tada_a_struct_from_lib2'
    Je vous colle l'erreur exacte demain si vous pensez que cela change quelque chose

    Une chose que je ne comprends pas très bien : sur windows on définit les méthodes/classes à exporter avec _declspec(dllexport)
    pourquoi n'est il pas possible de faire la même chose avec g++ ?

  9. #9
    Invité régulier
    Inscrit en
    décembre 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 45
    Points : 7
    Points
    7

    Par défaut

    Yes it says

    Code :
    undefined reference to `specific_structure_from_lib2'

  10. #10
    Expert Confirmé Sénior

    Inscrit en
    novembre 2005
    Messages
    5 104
    Détails du profil
    Informations forums :
    Inscription : novembre 2005
    Messages : 5 104
    Points : 5 985
    Points
    5 985

    Par défaut

    Aucune idee. Je te suggere a nouveau d'extraire un exemple minimal (ou tu as enleve tout ce qui n'est pas necessaire pour reproduire le probleme) et complet (ou tu donnes explicitement tout ce qui est necessaire pour reproduire le probleme) et de nous le donner.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •