Я предполагаю, что вы наблюдаете это поведение, поскольку вы выполняете встроенную инициализацию глобальных переменных без явного вызова функции. например globals.cpp:
// top of source file
#include "myincludes.h"
CSomeClass someObject(432);
int global_x = 42;
int global_y = InitY();
Порядок конструктора и деструктора глобальных объектов и порядок инициализации глобальной переменной в основном недетерминирован. (Я бы предположил, не обращаясь к стандартным справочным страницам, что переменные в исходном файле инициализируются от верхнего объявления до нижнего, но порядок «какой исходный файл идет первым» не определен.)
Лучшее решение - не иметь глобальных объектов (где конструктор запускается перед какими-либо функциями в библиотеке) или иметь зависимость от порядка инициализации глобальной переменной.
Лучше иметь функцию, которая явно инициализирует вашу библиотеку. Возможно, вам требуется, чтобы приложение вызывало эту функцию при запуске, или экспортированные функции вашей библиотеки вызывают ее после обнаружения, что инициализация не произошла. Затем инициализируйте ваши глобальные переменные.
В моей команде код, который запускается до "main" (или "DllMain"), строго запрещен. Другими словами, нет глобальных объектов. Нет функций для инициализации глобалов.