| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Да File -> New -> Project: C++ -> Win32 Project: Application Setting -> Application Setting -> Application type -> Static Library |
| Автор: xvr 27.11.2009, 17:00 | ||
Не понял |
| Автор: 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 секунд Именно так. Ты можешь напихать в проект файлов любого формата со своими обработчиками, и это тоже будет называться "Build" |
| Автор: FCM 27.11.2009, 19:06 | ||
Если библиотека строится из нескольких исходников, между которыми есть внешние зависимости, то Librarian их, наверное, все-таки стыкует (потому что на этапе "Creating Library" несоответствие внешних зависмостей между исходниками стат-библиотеки приведет к ошибке.) |
| Автор: Earnest 27.11.2009, 19:15 | ||
Нет, формат библиотеки больше похож на OBJ, никакие ссылки там не разрешаются, а ждут линкера.
Например? Не совсем поняла... |
| Автор: FCM 27.11.2009, 19:51 |
| Да, мое предыдущее утверждение неправильно (ошибка в конкретном примере возникала по другой причине)! Спасибо, все понятно! |