Linken von Objekten erzwingen
-
Hallo,
ich arbeite an einer Lösung für Selbst-registrierende Objekte, gemäss Jim Beveridge's Artikel "Self-registering, Objects in C++" im Dr. Dobb's Journal 8/1998.
Mein Problem:
Werden Klassen/Objekte nur indirekt verwendet, d.h. ich inkludiere nicht den Header und benutze nur Objekte vom Typ der Basisklasse, so werden die besagten Objekte nicht gelinkt.Denn: Der Linker bindet nur (i.d.R. direkt) referenzierte Symbole ein, alles Andere wird ignoriert.
Frage:
Gibt es eine Möglichkeit, den Linker in VS2005 und gcc 4.x dazu zu zwingen, alle Objekte (bestimmter Libs) einzubinden?Oder gibt es evtl. #pragma o.ä. Direktiven, um den Linker zum einbinden zu zwingen?
Ich danke euch schonmal im Voraus!
Gruss,
3DH
-
Hallo,
ich habe das gleiche Problem. Unter gcc 3.3.5 arbeitet folgender Code
namespace { bool isX(const Object * const object) { return dynamic_cast<const X * const>(object) != NULL; } const bool registered = SingleClassTypeInfoChecker::Instance().Register(Loki::TypeInfo(typeid(X)), isX); }
Hier wird ein shared lib erzeugt. Bei der Verwendung von VC2005 "optimiert" der linker den anonymous namespace weg. Wenn es eine allgemeine Loesung gibt waere ich daran sehr interessiert.
Vielen dank im voraus
mk