Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/11/2008, à 21:24

tiky

Subdirs et les Autotools

Bonsoir,

J'ai décidé aujourd'hui de faire un peu de nettoyage dans un projet en cours, principalement parce que je rencontre des problèmes au niveau conceptuel. Le projet est développé en C++ et j'utilise les Autotools. J'ai découpé le code en espace de nom et avec l'augmentation du nombre de fichiers, je souhaite ranger les fichiers dans des sous-dossiers en fonction de leur espace de nom. J'obtiens donc la hiérarchie suivante:

...
src/
    ui/
       widget/
       dialog/
    manager/
    ...
...

Pour la compilation, j'ai placé dans chaque sous-dossiers un Makefile. Ce Makefile génère une bibliothèque statique et le Makefile du dossier parent lie ces bibliothèques avec des fichiers objets. Enfin le Makefile du dossier src/ lie toutes les bibliothèques et fichiers objets pour donner le binaire final.

La compilation se passe s'en problème, seulement lorsque j'arrive à la dernière étape, celle consistant à assembler tout les fichiers objets et bibliothèques, j'obtiens des undefined reference sur une méthode.

J'ai une classe Object contenu dans ui/ et deux classes Widget et Dialog contenues respectivement dans widget/ et dialog/. Comme vous vous en doutez, Widget et Dialog héritent d'Object. Lorsque je compile, je génère libwidget.a qui correspond au dossier widget/ et libdialog.a qui correspond au dossier dialog/, puis je compile object.cpp et je lie libwidget.a, libdialog.a et object.o ensemble pour obtenir libui.a. Seulement lorsque je souhaite ensuite lier libmanager.a avec libui.a, là ld me signale qu'il ne connaît pas Object::Object().

Je demande si le problème ne vient pas du fait qu'il y a une dépendance cyclique entre libwidget.a/libdialog.a et libui.a. En effet, libwidget.a et libdialog.a font références à Object et j'ai besoin de libwidget.a et libdialog.a pour créer libui.a?

Edit: Est-ce que ça peut venir du fait que j'ai une classe qui porte le même nom que l'espace de nom dans laquelle elle se trouve? En effet j'ai Widget dans l'espace Widget et Dialog dans Dialog? je sais pas si cela est possible?

Dernière modification par tiky (Le 30/11/2008, à 11:17)


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#2 Le 29/11/2008, à 22:37

tiky

Re : Subdirs et les Autotools

Je suis pas le seul à avoir des erreurs:
http://ubuntuforums.org/showthread.php?t=877277


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#3 Le 29/11/2008, à 23:15

tiky

Re : Subdirs et les Autotools

Problème résolu en utilisant libtool plutôt que les .a.


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#4 Le 30/11/2008, à 11:18

tiky

Re : Subdirs et les Autotools

En fait ce n'est pas résolu, j'ai remplacé lib_LTLIBRARIES par noinst_LTLIBRARIES et maintenant, ça ne compile plus. Ça doit venir de l'option -rpath, je suis perdu...
J'utilise exactement cette technique:
http://www.manpagez.com/info/automake/automake-1.10.2/automake_75.php


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne