Как предотвратить компоновщик от оптимизации кода запуска?

У меня следующая проблема: Мой (C ++ -) проект состоит из нескольких подпроектов. В каждом из них есть несколько файлов с кодом, который я хочу запустить при запуске. Мое решение до сих пор состоит в том, чтобы использовать статические переменные, которые вызывают соответствующий код при инициализации следующим образом:

// Foo.cpp

static TFooRegistry sFooRegistry;   // does stuff in constructor.

При сборке моего проекта с использованием dll для каждого подпроекта все работает нормально, и код выполняется должным образом. Однако при статическом связывании подпроектов компоновщик определяет, что Foo.o не содержит кода, на который когда-либо ссылались извне, и оптимизирует его. Конечно, я мог бы добавить ссылку на sFooRegistry где-нибудь еще, но это утомительно и подвержено ошибкам.

Какие (стандартные совместимые) способы решения этой проблемы существуют?

Хорошо, что я могу сделать на Mac / GCC и Win / Visual Studio?

Ответы на вопрос(2)

Ваш ответ на вопрос