Предположим, статическая библиотека libfoo зависит от другой статической библиотеки libbar для некоторых функций. Они и мое приложение написаны на D. Если мое приложение использует только libfoo напрямую и вызывает только функции из libfoo, которые не ссылаются на символы из libbar, иногда программа успешно связывается, не передавая libbar компоновщику, а в других случаях это не так.
То, что происходит, зависит от того, какой компилятор я использую для компиляции libfoo, libbar и моего приложения, даже если все компиляторы используют цепочку инструментов GCC для компоновки. Если я использую DMD, я никогда не получу ошибки компоновщика, если я не передам libbar компоновщику. Если я использую GDC, я иногда использую это по причинам, которые я не понимаю. Если я использую LDC, я всегда делаю.
Что определяет, не сработает ли компоновщик GCC, если символ, указанный в libfoo, не определен, но этот символ встречается в функции, на которую не ссылается объектный файл приложения?