Bonjour.
J'ai une application qui link avec des librairies en static.
J'ai donc à la fin, un executable sans DLL.
Le linker fait son travail, c'est à dire qu'il supprime toutes les classes / fonctions qui ne sont pas utilisées. Ceci est normal.
Sauf que... j'utilise un système de sérialisation "maison" basée sur le concept d'archive / Objet serialisable des MFC. En gros, chaque classe contient des informations de runtime permettant d'instancier une classe par son nom (sous forme de chaîne de caractères) et de se serialiser / deserialiser la classe. Le but ? Se passer des classes entre process via des sockets.
Ca fonctionne plutot bien sauf que....
Le serveur instancie la class A puis l'envoi au client. Le client reçoit une donnée puis récupère le nom de la classe, l'instancie dynamiquement, deserialise et on a la classe copie de celle du serveur... sauf que, nulle par dans le code, au niveau du client, il n'y a d'instanciation de la classe A et le linker la supprime... lorsque le système de serialisation tente d'instancier A, il ne trouve pas A et ne peut donc l'instancier.
Seule solution trouvée pour le moment : Créer dans l'executable, une variable globale de A qui ne sert à rien, sauf à instancier A afin que le linker ne supprime pas la classe.
J'ai tenté de faire une variable statique de A dans A, mais c'est idem, la classe A ne fait plus partie de l'EXE une fois linké.
Y a-t-il un moyen plus propre de dire au linker : conserve cette classe dans l'exe au lieu d'instancier une classe qui ne sert à rien ? Via un pragma par exemple.
J'utilise wxWidgets / Code::Blocks / MinGW (gcc + gdb). Une solution multi-plateforme / multi compilateur est préférable.
Des idées ?
Partager