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