Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Стат библиотека: компиляция/линковка


Автор: FCM 27.11.2009, 09:38
В MSVC (help или MSDN) пишут в теме о фазах трансляции:
 Linkage:    All external references are resolved to create an executable program or a dynamic-link library.

Возникает вопрос, почему не упомянута статическая библиотека?
Разве можно ее построить только компилированием - линковка же при ее построении тоже нужна.
 

Автор: jimbo 27.11.2009, 12:05
чисто с синтаксической точки зрения, сугубо моем, статика - она не нужнается в линковке. это же ясные заранее адреса функций. статическая либа крепится к ехе, и ехе уже берет нужный код из нее. не так? 

ехе -модуль нуждается в связывании, там есть Export table и Import table. При запуске модуля, происходит связывание функций табилцы импорта на нужные адреса.

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

Автор: xvr 27.11.2009, 12:47
Статическая библиотека не является исполняемым кодом (например PE), в отличие от exe и dll. Она представляет собой простой архив из объектных файлов. При ее построении никакая линковка не производится

Автор: FCM 27.11.2009, 12:58
Статическая библиотека может собираться из нескольких исходников.
В Visual Studio с помощью одной  компиляции lib-файл разве можно получить? 

Автор: xvr 27.11.2009, 14:53
Цитата(FCM @ 27.11.2009,  12:58)
Статическая библиотека может собираться из нескольких исходников.
В Visual Studio с помощью одной  компиляции lib-файл разве можно получить?

Да
File -> New -> Project: C++ -> Win32 Project: Application Setting -> Application Setting -> Application type -> Static Library
 

Автор: FCM 27.11.2009, 16:30
Цитата(xvr @  27.11.2009,  14:53 Найти цитируемый пост)
File -> New -> Project: C++ -> Win32 Project: Application Setting -> Application Setting -> Application type -> Static Library


Как создать проект типа Static Library я знаю.
Но при этом при компиляции .lib-файл не будет создан. Только после команды Build.

Автор: xvr 27.11.2009, 17:00
Цитата(FCM @ 27.11.2009,  16:30)
Но при этом при компиляции .lib-файл не будет создан. Только после команды Build.

Не понял  smile Я до сих пор считал, что Build - это и есть компиляция. Или вы подразумеваете под компиляцией сборку в один вызов компилятора с командной строки?

Автор: FCM 27.11.2009, 18:13
Compile (Ctrl+F7). Для проектов любого типа приводит к компиляции текущего исходника.

Build для проектов, например, типа Console приводит к компиляции (compiling) всех исходников и компоновке (linking). То же и для DLL.
Сейчас посмотрел - Build для проектов типа стат-библиотека приводит к компиляции всех исходников проекта, а потом происходит нечто, называемое Creating Library.
Получается смысл Build меняется в зависимости от типа проекта.

Автор: Earnest 27.11.2009, 18:38
Executable собирает linker, а либы - librarian. Это не компилятор, но и не линкер. Просто складывает в кучу без разрешения внешних ссылок.

Добавлено через 9 минут и 46 секунд
Цитата(FCM @  27.11.2009,  19:13 Найти цитируемый пост)
Получается смысл Build меняется в зависимости от типа проекта.

Именно так. Ты можешь напихать в проект файлов любого формата со своими обработчиками, и это тоже будет называться "Build"

Автор: FCM 27.11.2009, 19:06
Цитата(Earnest @  27.11.2009,  18:38 Найти цитируемый пост)
Executable собирает linker, а либы - librarian. Это не компилятор, но и не линкер. Просто складывает в кучу без разрешения внешних ссылок.


Если библиотека строится  из нескольких исходников, между которыми есть внешние зависимости, то Librarian их, наверное, все-таки стыкует (потому что на этапе "Creating Library" несоответствие внешних зависмостей между исходниками стат-библиотеки приведет к ошибке.)
 

Автор: Earnest 27.11.2009, 19:15
Нет, формат библиотеки больше похож на OBJ, никакие ссылки там не разрешаются, а ждут линкера. 
Цитата(FCM @  27.11.2009,  20:06 Найти цитируемый пост)
несоответствие внешних зависмостей между исходниками стат-библиотеки приведет к ошибке

Например? Не совсем поняла...

Автор: FCM 27.11.2009, 19:51
Да, мое предыдущее утверждение неправильно (ошибка в конкретном примере возникала по другой причине)!
Спасибо, все понятно!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)