Перегрузка имени святого заполнителя, Бэтмен. Давайте сначала заменим A, B и C на libstatic
, libshared
и myapp
, чтобы сделать вещи немного более разборчивыми:
Предположим, у вас есть статическая библиотека libstatic
, и
библиотека динамических общих объектов libshared
и
ваша программа myapp
под linux. предполагать
эта библиотека libstatic
вызывает функции из
библиотека libshared
и ваша программа (myapp
) вызывает
функции из библиотеки libstatic
. Теперь предположим
что все функции, которые myapp
вызывает в libstatic
не использовать функции в libshared
.
Для компиляции myapp
будет достаточно ссылки
просто libstatic
и пропустите libshared
и, кроме того, можете
ваша программа myapp
будет запущена в системе
без библиотеки libshared
установлена?
Итак, насколько я понимаю ваш вопрос, есть библиотека libstatic
, некоторых функций, в которых используется libshared
. Вы хотите знать: если я не использую любую из libstatic
функций, которые зависят от libshared
, будет ли myapp
связываться и работать без libshared
?
Ответ - да, если верны две вещи:
Звонки, которые вы делаете на libstatic
, не зависят от libshared
напрямую или косвенно . Это означает, что если myapp
вызывает функцию в libstatic
, которая вызывает другую функцию в libstatic
, которая вызывает функцию в libshared
, то myapp
теперь зависит от libshared
.
Вызовы, которые вы делаете в libstatic
, не зависят от какой-либо функции в libstatic
, реализация которой появляется в том же модуле компиляции (объектный файл) с вызовом libshared
. Компоновщик вводит код из статической библиотеки на уровне объектных файлов, а не на уровне отдельных функций. И помните, эта зависимость аналогично связана, поэтому если вы вызываете функцию в foo.o
, а что-то еще в foo.o
вызывает функцию в bar.o
, а что-то в bar.o
зависит от libshared
, вы тост.
Когда вы связываете статическую библиотеку с приложением, связываются только объектные файлы, содержащие символы (прямо или косвенно). Таким образом, если окажется, что ни один из объектных файлов, которым myapp
не требуется libstatic
, зависит от libshared
, то myapp
не зависит от libshared
.