Динамическое связывание — это метод оптимизации, который использовался для полного использования преимуществ виртуальной памяти системы. Один процесс может делиться своими страницами с другими процессами. Например, libc++ должен быть связан со всеми программами на C++, но вместо копирования исполняемого файла в каждый процесс его можно динамически связывать со многими процессами через общие виртуальные страницы.
Однако это приводит меня к следующим вопросам
- Когда программа на C++ скомпилировано. Он должен иметь ссылки на функции и код библиотеки C++ (скажем, например, код библиотеки потоков). Как компилятор обеспечивает наличие этих ссылок в исполняемом файле? Не приводит ли это к циклической зависимости между компилятором и операционной системой? Поскольку компилятор должен сделать ссылку на динамическую библиотеку в исполняемом файле.
- Как и когда вы будете использовать динамическую библиотеку? Как его сделать? Какая конкретная команда компиляции используется для создания такого файла из стандартного файла *.cpp?
- Обычно, когда я устанавливаю библиотеку, существует файл lib/< Каталог /code> с файлами *.a и файлами *.dylib (в mac-OSX). Как мне узнать, на какие из них следует ссылаться статически, как с обычным файлом *.o, а с какими предполагается связываться динамически? Я предполагаю, что файлы *.dylib являются динамическими библиотеками. Какой флаг компилятора можно использовать для ссылки на них?
- Для чего нужны флаги -L и -l? Что значит указать, например, флаг -lusb в командной строке?
Подробнее здесь: https://stackoverflow.com/questions/365 ... ke-a-dylib
Мобильная версия