Программист должен убедиться, что все где-то определено.Программист несет ответственность за это.
Различные инструменты будут жаловаться по пути, если они заметят, что чего-то не хватает:
Компилятор заметит, что некоторые вещи отсутствуют, и выдаст ошибку, если поймет, что чего-то нет.
Компоновщик выдаст ошибку, если не сможет исправить ссылку, которой нет в библиотеке.
Во время выполнения есть загрузчик, который вытягивает соответствующие общие библиотеки в область памяти процесса.Загрузчик - это последнее, что получает трещину при исправлении символов перед тем, как программа запускает какой-либо код, и выдает ошибки, если не может найти разделяемую библиотеку / dll или если используется интерфейс для библиотеки, которая использоваласьвремя компоновки не совпадает корректно с доступной библиотекой.
Ни один из этих инструментов НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ за то, что все определено.Это просто те вещи, которые заметят, если что-то НЕ определено, и те, которые выдают сообщение об ошибке.