Использование статических связей в c ++ linux: нужно ли перекомпилировать все каждый раз, когда я меняю библиотеку? - PullRequest
2 голосов
/ 21 марта 2012

У меня есть программа, которая статически ссылается на другую библиотеку в linux, используя -L (mylib.a) при компиляции (используя eclipse cdt).

Насколько я понимаю, тот факт, что ссылка является статической, означает, что библиотека вставлена ​​в мой двоичный файл. Означает ли это, что если я внесу изменения в mylib, мне нужно перекомпилировать мой бинарный файл? Я предполагаю, что так, но я хотел убедиться, потому что это большие накладные расходы во времени. Обратите внимание, что если было внесено изменение в mylib, то eclipse признает, что его нужно перекомпилировать, но не распознает, что сам двоичный файл нужно перекомпилировать, даже если он ссылается на mylib.

Ответы [ 2 ]

3 голосов
/ 21 марта 2012

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

1 голос
/ 21 марта 2012

Да, вы должны перестроить свой код с измененной библиотекой, чтобы получить двоичный файл, который ссылается на новую и обновленную библиотеку.

Построение проекта можно разбить на два этапа:
Компиляция:
На этом этапе компилятор компилирует каждый модуль перевода. Он проверяет исходный код на допустимый синтаксис и т. Д. И создает объектные файлы. Эти объектные файлы содержат выходные данные кода сборки исходного кода.

Связь:
На этом этапе компоновщик связывает воедино объектные файлы и библиотеки для создания исполняемого файла.

Когда приложение или проект используют статическую библиотеку, он включает файл заголовка, который обычно называется интерфейсом библиотеки, который содержит список API и других конструкций, которые использует приложение. Приложению также необходимо связать файл библиотеки.

Очевидно, что если интерфейсы не повреждены, т. Е. Заголовочный файл библиотеки, включенный в ваше приложение, остается неизменным, компиляция не требуется, но вам просто нужно связаться с обновленной библиотекой.

Тем не менее, я не думаю, что есть способ просто перекомпоновать обновленные библиотеки через Eclipse IDE, поэтому вам следует пересобрать свой проект, который по сути сделает все необходимое.
то есть:
перекомпилируйте ваш проект и подключите к нему новую библиотеку или
просто перенесите новую библиотеку в свой проект.

...