Ich habe folgendes Problem: Mein (C++ -) Projekt besteht aus mehreren Teilprojekten. In jedem habe ich mehrere Dateien mit Code, den ich beim Start ausführen möchte. Meine Lösung ist so weit statische Variablen zu verwenden, die den jeweiligen Code auf Initialisierung wie folgt aufrufen:Wie verhindert man, dass der Linker Startup Code weg optimiert?
// Foo.cpp
static TFooRegistry sFooRegistry; // does stuff in constructor.
Wenn mein Projekt den Aufbau mit DLLs für jedes Teilprojekt, funktioniert alles einwandfrei und der Code ausgeführt wird, wie erwartet. Wenn die Teilprojekte jedoch statisch verknüpft werden, stellt der Linker fest, dass Foo.o keinen Code enthält, der jemals von außen referenziert wurde, und optimiert ihn. Natürlich könnte ich einen Verweis auf sFooRegistry woanders hinzufügen, aber das ist mühsam und fehleranfällig.
Welche (standardkonforme) Art der Lösung gibt es?
OK, was kann ich auf Mac/Gcc tun und Win/Visual Studio?
Doh! Lieber Bjarne: Warum? – Tobias
Was ist der Unterschied zwischen einem Linker, der Code optimiert und nicht verbindet? Ich dachte, das wären nur zwei Namen für die gleiche Sache. – Tobias
C++ wurde entwickelt, um mit vorhandenen Linkern zu arbeiten (siehe Stroustrups D & E-Buch), die kein Konzept von Konstruktoren hatten/haben. –