Qt имеет Q_COREAPP_STARTUP_FUNCTION
макрос для регистрации функции, которая будет вызываться как часть QCoreApplication
конструктор. Это прекрасно работает, если используется внутри приложения или динамически связанной библиотеки. Однако функция не выполняется, если используется внутри статической библиотеки.
Насколько я понимаю, этот макрос создает статический класс, в конструкторе которого метод передается в платформу Qt. Но поскольку этот класс нигде не используется, компоновщик просто исключает его при связывании конечного приложения.
Вопрос здесь: верно ли мое предположение? И есть ли способ сказать компилятору не исключать такой экземпляр? Дело в том, что я не знаю, используется ли и сколько, и поэтому нецелесообразно ссылаться на них явно. Требуются решения для всех компиляторов (msvc, gcc, clang).
Задача ещё не решена.
Других решений пока нет …