Wie kann der Linker daran gehindert werden, den Startcode zu optimieren?

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 bisherige Lösung besteht darin, statische Variablen zu verwenden, die bei der Initialisierung den entsprechenden Code wie folgt aufrufen:

// Foo.cpp

static TFooRegistry sFooRegistry;   // does stuff in constructor.

Wenn Sie mein Projekt mit DLLs für jedes Unterprojekt erstellen, funktioniert alles einwandfrei und der Code wird wie erwartet ausgeführt. Beim statischen Verknüpfen der Teilprojekte stellt der Linker jedoch fest, dass Foo.o keinen Code enthält, auf den jemals von außen verwiesen wurde, und optimiert diesen. Natürlich könnte ich irgendwo anders auf sFooRegistry verweisen, aber das ist mühsam und fehleranfällig.

Welche (standardkonformen) Lösungsmöglichkeiten gibt es?

OK, was kann ich auf Mac / GCC und Win / Visual Studio machen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage