Почему проект статической библиотеки C ++ не имеет настроек компоновщика? - PullRequest
10 голосов
/ 25 июня 2011

Раскрытие моего невежества: почему проект статической библиотеки (в моем случае в Visual Studio) не имеет настроек компоновщика на странице свойств проекта? Я думал, что «связывание» было чем-то большим в отношении библиотек, но, видимо, я в корне неправильно что-то понимаю.

Ответы [ 3 ]

15 голосов
/ 25 июня 2011

Создание исполняемого файла состоит из трех этапов:

  1. Компилятор преобразует исходный код в объектные файлы.
  2. Архиватор / библиотекарь группирует объектные файлы вместе в библиотеки (этошаг необязательный).
  3. Компоновщик связывает вместе объектные файлы и библиотеки для создания полного исполняемого файла.

Библиотека - это просто набор объектов, которые по определению не былисвязаны еще.Компоновщик не используется для создания библиотеки, поэтому имеет смысл, что для него не будет опций компоновщика.

5 голосов
/ 25 июня 2011

Связывание - это процесс объединения объектных файлов в исполняемые файлы (и динамические библиотеки, которые имеют формат, аналогичный формату исполняемых файлов).

Статические библиотеки не связаны, это простые архивы объектных файлов.

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

4 голосов
/ 25 июня 2011

Потому что вы не связываете это, чисто и просто.

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

Например (а это UNIX, а не Windows, но концепции похожи), вы бы использовали компилятор cc, чтобы превратить ваши исходные файлы в объектные файлы, и архиватор ar, чтобы превратить их в библиотеку. Компоновщик (или редактор связей) ld не должен принимать участие, пока вы не захотите перейти к следующему шагу и включить вашу библиотеку в исполняемый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...