Библиотека времени выполнения и динамическая библиотека

Я искал и читал некоторое время, но до сих пор не могу получить четкие ответы:

В чем разница между библиотекой времени выполнения и динамической библиотекой?

Чтобы быть конкретным, я хочу знать следующие аспекты:

Как работает библиотека времени выполнения в процессе сборки?

Почему это называется "среда выполнения"? Он всегда загружается в память или что-то в этом роде?


person Zhi    schedule 01.09.2014    source источник
comment
Возможный дубликат Разница между статическими и общими библиотеками?   -  person Abhinav    schedule 31.08.2016


Ответы (1)


Обычно существует три типа библиотек с точки зрения доступа к ним исполняемых файлов:

  • статический;
  • динамический, автоматически загружаемый; а также
  • динамический, загружаемый вручную.

Статические библиотеки, как правило, связаны с исполняемым файлом во время сборки, обычно с помощью компоновщика. Таким образом, исполняемый файл навсегда «застревает» в этих библиотеках.

Динамические библиотеки имеют "позднее связывание", они, как правило, связаны с вашим исполняемым файлом, когда код выполняется или собирается запуститься. Это то, что означает время выполнения, что-то делается во время выполнения, в отличие от статической компоновки во время компиляции).

Автоматически загружаемый файл обрабатывается операционной системой (загрузчиком), и вам не нужно предпринимать какие-либо конкретные действия в коде. Во время сборки вы указали, какие библиотеки необходимы при загрузке исполняемого файла, но фактическое связывание этих библиотек с вашим исполняемым файлом происходит позже.

Это означает, что вы можете заменить библиотеки, чтобы повлиять на работу исполняемого файла, без повторного связывания исполняемого файла (в отличие от статического связывания).

Ручные динамические библиотеки — это те, в которых вы явно загружаете библиотеку из своего кода с помощью таких вызовов, как dlopen (чтобы открыть библиотеку) и dlsym (чтобы получить адрес символа в этой библиотеке).

Вы также можете взглянуть на этот ответ, на статическом/динамическом различии.


Это охватывает типы библиотек, с которыми вы, вероятно, столкнетесь, но с точки зрения ссылки, которую вы предоставили в комментарии, кажется, что упоминаемая здесь «библиотека времени выполнения» — это просто библиотека, которая предоставляет некоторые возможности языка.

Например, библиотека времени выполнения C — это библиотека, содержащая такие вещи, как fopen() для открытия файлов или strcpy() для копирования строк. Хотя компилятор понимает базовый язык (if, while и т. д., включая вызов функций), дополнительные возможности языка предоставляются в виде библиотек, содержащих функции, которые можно назвать.

В этом смысле вопрос о разнице между динамическими библиотеками и библиотеками времени выполнения неуместен, поскольку они относятся к разным концепциям. Библиотека среды выполнения может предоставляться как статическая или динамическая.

person paxdiablo    schedule 01.09.2014
comment
Я тоже никогда об этом не слышал. Но здесь это так. - person Zhi; 01.09.2014
comment
Я также нашел этот термин здесь: страница 7 в openmp. org/wp-content/uploads/omp-hands-on-SC08.pdf . Не уверен, что это значит библиотека времени выполнения - person ransh; 27.03.2017