Задержка инициализации статических переменных в сторонней библиотеке - PullRequest
0 голосов
/ 28 января 2019

Я ссылаюсь на стороннюю библиотеку, которая использует статические переменные.В конечном итоге они инициализируются до main и преждевременно захватывают ресурсы, что приводит к хаосу в моем приложении.Есть ли какой-то идиома / техника / метод обтекания, чтобы восстановить контроль и определить точку выполнения, где библиотеке разрешено инициализировать все ее статические переменные без взлома самой библиотеки?

В частности, у меня есть thirdpartylib::system объект, который когда-то определен в main, захватывает все виды ресурсов перед вводом main.Компилятор видит, что код может быть обработан, и затем выполняет инициализацию всех своих статических переменных вне контроля потребителя библиотеки.В идеале, я бы хотел, чтобы какой-то охранник остановил это, пока я не скажу.,

// my code that may exit before I want the lib stuff to be invoked
{
    LET_SYSTEM_RUN_RIOT();
    thirdpartylib::system sys;
    // do some stuff with it
    KILL_IT_ALL_WITH_FIRE();
}

1 Ответ

0 голосов
/ 28 января 2019

Единственное, что вы можете сделать, это построить его динамически и загрузить во время выполнения через dload / LoadLibrary.Тогда вы полностью контролируете, когда библиотека инициализируется.Статически связывая, вы концептуально делаете библиотеку частью своего приложения, что означает, что она будет инициализироваться как часть вашего приложения, то есть перед вашей основной функцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...