Мне предложили, когда у меня возникнут дополнительные вопросы о моих старых, чтобы создать новый вопрос и обратиться к старой. Итак, это оригинальный вопрос: What is the C runtime library?C Библиотека времени выполнения 2
ОК, из ваших ответов, теперь я получаю статично связанные библиотеки - это реализация Microsoft стандартных функций C. Теперь:
Если я правильно понял, схема будет следующей: я хочу использовать printf(), поэтому я должен включить <stdio.h>
, который просто сообщает компилятору, что есть функция printf() с этими параметрами. Теперь, когда я компилирую код, потому что printf() определен в стандартной библиотеке C, и поскольку Microsoft решила назвать его библиотекой C Run Time, она автоматически статически связана с libcmt.lib (если libcmt.lib установлен в компиляторе) в время компиляции. Я прошу, потому что в wikipedia, в статье о библиотеке времени исполнения есть, что библиотека времени выполнения связана во время выполнения, но файлы .lib связаны во время компиляции, я прав?
Теперь меня смущает. Существует .dll версия стандартной библиотеки C. Но я думал, что для ссылки .dll-файла, вы должны на самом деле вызвать программу winapi для загрузки этой библиотеки. Итак, как могут быть эти функции динамически связаны, если нет статической библиотеки для предоставления кода, чтобы сообщить Windows о загрузке желаемых функций из dll?
И действительно, последний вопрос на эту тему - это функции стандартной библиотеки C, также вызывающие winapi, даже если они не являются .dll-файлами, такими как более продвинутые функции WinAPI? Я имею в виду, что в конце для доступа к фреймбуферу и печати что-то вы должны сказать Windows, чтобы сделать это, так как ОС не может позволить вам напрямую манипулировать HW. Я думаю об этом, так как OS должна быть написана для поддержки всех стандартных функций библиотеки C одинаковым образом в аналогичных версиях, поскольку они статически связаны и могут по-разному поддерживать более сложные вызовы WinAPI, потому что новая версия ОС может иметь настройки в DLL-файле ,
Спасибо за ваш ответ. Думаю, я правильно понимаю dll. Я, когда вы хотите загрузить некоторую dll напрямую в другую статически связанную программу, вы должны вызвать WinAPI для этого. Итак, как вы называете ОС для загрузки dll, когда ваша единственная библиотека - это dll? –