Отчасти это проблема качества реализации, но есть реальная ошибка.
А именно, по стандарту компоновщик должен добавить во все единицы компиляции , на которые ссылаются.Но скажем, что в библиотеке у вас есть модуль компиляции, в котором нет ничего, кроме статической переменной, инициализация которой регистрирует что-то в каком-то реестре, например, обработку сообщений, фабрику, что угодно, или, возможно, вывод ее конструктора и деструктора, соответственно, «перед основной» и"после основной".Если ничто в этом модуле компиляции не указано, то компоновщик имеет право просто пропустить его, удалить его.
Итак, чтобы гарантировать, что такие статические переменные не будут оптимизированы, с помощью стандартного инструментария связать егонеобходимо и достаточно для ссылки на что-либо в этом модуле компиляции.
Просмотр в Visual Studio того, что было включено, насколько я знаю, нет другого выхода, кроме как запросить подробный вывод из компоновщика, например, опция компоновщика /verbose:ref
.
Однако с этой опцией вы получите действительно подробный вывод.
Альтернативой является запрос компоновщика для файла карты, например, опция компоновщика /map:blah
.
Также этот вывод очень многословен.