Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Communauté
Communauté Suivez l'actualité C++ et contribuez à la vie de la communauté francophone C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/04/2010, 11h21   #1
rastakouair
Invité régulier
 
Inscription : 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
rastakouair est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2010, 13h21   #2
Jean-Marc.Bourguet
Expert Confirmé Sénior

 
Inscription : novembre 2005
Messages : 4 970
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 4 970
Points : 5 607
Points : 5 607
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.
Jean-Marc.Bourguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2010, 15h00   #3
rastakouair
Invité régulier
 
Inscription : décembre 2007
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 45
Points : 7
Points : 7
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
rastakouair est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2010, 15h49   #4
Jean-Marc.Bourguet
Expert Confirmé Sénior

 
Inscription : novembre 2005
Messages : 4 970
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 4 970
Points : 5 607
Points : 5 607
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.
Jean-Marc.Bourguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2010, 16h26   #5
rastakouair
Invité régulier
 
Inscription : décembre 2007
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 45
Points : 7
Points : 7
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 ?
rastakouair est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2010, 18h40   #6
rastakouair
Invité régulier
 
Inscription : décembre 2007
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 45
Points : 7
Points : 7
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
rastakouair est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2010, 18h58   #7
Jean-Marc.Bourguet
Expert Confirmé Sénior

 
Inscription : novembre 2005
Messages : 4 970
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 4 970
Points : 5 607
Points : 5 607
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.
Jean-Marc.Bourguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2010, 23h04   #8
rastakouair
Invité régulier
 
Inscription : décembre 2007
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 45
Points : 7
Points : 7
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++ ?
rastakouair est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2010, 09h42   #9
rastakouair
Invité régulier
 
Inscription : décembre 2007
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 45
Points : 7
Points : 7
Yes it says

Code :
undefined reference to `specific_structure_from_lib2'
rastakouair est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2010, 10h51   #10
Jean-Marc.Bourguet
Expert Confirmé Sénior

 
Inscription : novembre 2005
Messages : 4 970
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 4 970
Points : 5 607
Points : 5 607
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.
Jean-Marc.Bourguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h33.


 
 
 
 
Partenaires

Hébergement Web