У меня есть код, как это:инициализация константных переменных
bool doSomething()
{
std::cout << "I'm here!"
return true;
}
const bool x = doSomething();
Если поместить в CPP-файл в моем консольного приложения Visual C++, код выполняется, как ожидается, перед входом в метод Main().
Однако, если я поместил этот код в .cpp-файл в проект статической библиотеки ссылок (который связан с моим консольным приложением), код никогда не будет выполнен. Я не определяю какие-либо методы в этом файле, которые используются извне, нет соответствующего файла .h. Возможно ли, что компоновщик не связывает файл? Как я могу избежать этого?
(Фактически код запускается, если я создаю файл заголовка для файла cpp, поместите другой метод «void dummy() {}» внутри cpp- и h-файла и вызывают фиктивный() из основного.)
Спасибо большое!
Хорошо, это нормально, но мой метод doSomething() на самом деле что-то делает (как говорит название :-)). В моем конкретном случае он регистрирует тип на фабрично-синглетоне, который используется из других частей. Таким образом, эта «оптимизация» приводит к изменению поведения. Это нормально? – Philipp
Это не нормально, но линкер не знает, что вы хотите, чтобы этот код исполнялся в клиенте библиотеки. Было бы лучше использовать какой-то альтернативный метод, чтобы разоблачить этот необходимый вызов, когда клиент должен каким-то образом инициировать библиотечную инициализацию, путем внешней ссылки на этот код, который заставляет его тянуть на этапе ссылки. –