Hello,
Je ne sais pas si c'est le bon forum pour demander ça, mais je ne sais pas ou poster...
J'ai mon programme décomposé en librairies statique. Dans ces librairies je déclare des instances de classes qui ne fonctionne que par effets de bords.
Au moment de l'édition des liens, mon objets passe à la poubelle.
Je comprend bien qu'une classe ou des fonctions non utilisés soient supprimés à l'édition des liens, mais là il me supprime un objet qui aurait du provoquer une allocation mémoire et l'appel au constructeur !
J'ai essayer plein de truc, mais les seules solutions pour que mes objets soient effectivement présent est d'avoir un liens direct entre le main et mon objet, ou alors de déclarer mon objet directement dans le main.
Si vous connaissez un meilleur forum pour ce type de question, dites-le moi.
Merci
# Bonne question
Posté par Émilien Kia (site web personnel) . Évalué à 1.
Un solution consiste peut etre à une virtualisation des classes de tes objets et (via la surcharge des constructeurs) enregistrer les objets dans un vecteur/tableau.
Un jour libre ?
[^] # Re: Bonne question
Posté par sn00py . Évalué à 1.
[^] # Re: Bonne question
Posté par Roulious . Évalué à 1.
Si je comprends bien, tu veux utiliser unUniqueObjet dans ton main.
Ca me semble étrange que ce soit le linker qui râle : lors de la compilation de ton main, il n'y a aucune déclaration de unUniqueObject, et ça ne devrait donc pas compiler. Tout ce que tu utilises dans une unité de traduction (c.a.d ce que te donne le préprocesseur) doit y être déclaré.
Dans ton cas, il faut donc que tu déclares unUniqueObjet dans le fichier contenant la déclaration de tes classes de la bibliothèque.
P.S. avec du code qui compile réellement, ton exemple serait plus sympa à lire :-)
[^] # Re: Bonne question
Posté par Émilien Kia (site web personnel) . Évalué à 3.
Quand lance le programmes, les objets non déclarés dans le 'main' ne sont pas ajoutés à la chaine comme ils devraient.
Un jour libre ?
[^] # http://www.chezmoicamarche.com
Posté par Obsidian . Évalué à 2.
g++ v3.3.3 sur une Fedora Core 2.
Fais un "g++ -v" pour connaître ta version du compilo.
Ah également: Essaie d'éditer tes liens avec g++ plutôt qu'avec ld directement, j'ai déjà eu ce genre de problème.
g++ -O2 -c lib.cpp -o lib.o
puis
g++ -O2 -o effet main.cpp lib.o
pour éditer le fichier final 'Effet".
Bonne chance.
[^] # Re: http://www.chezmoicamarche.com
Posté par sn00py . Évalué à 1.
g++ -O2 -c lib.cpp lib.o
ar cru lib.a lib.o
ranlib lib.a
g++ -O2 -o effet main.cpp lib.a
[^] # Re: Bonne question
Posté par Émilien Kia (site web personnel) . Évalué à 2.
Est-ce que tu as essayer de déclarer tes objets comme volatiles ? ca forcera peut-etre la présence de l'objet.
Avec quel version de gcc compiles-tu ? As tu le même problème en mode debug ?
Un jour libre ?
[^] # Re: Bonne question
Posté par ecyrbe . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.