![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: нет Всего: 9 |
В MSVC (help или MSDN) пишут в теме о фазах трансляции:
Linkage: All external references are resolved to create an executable program or a dynamic-link library. Возникает вопрос, почему не упомянута статическая библиотека? Разве можно ее построить только компилированием - линковка же при ее построении тоже нужна. |
|||
|
||||
| jimbo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
чисто с синтаксической точки зрения, сугубо моем, статика - она не нужнается в линковке. это же ясные заранее адреса функций. статическая либа крепится к ехе, и ехе уже берет нужный код из нее. не так?
ехе -модуль нуждается в связывании, там есть Export table и Import table. При запуске модуля, происходит связывание функций табилцы импорта на нужные адреса. длл - тоже нуждается. так как грузиться может в любой адрес, в завимимости от свободного, можно конечно настроить так, чтобы грузилась в один и тот же, но тогда не всегда можно будет воспользоваться такой либой. --------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Статическая библиотека не является исполняемым кодом (например PE), в отличие от exe и dll. Она представляет собой простой архив из объектных файлов. При ее построении никакая линковка не производится
|
|||
|
||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: нет Всего: 9 |
Статическая библиотека может собираться из нескольких исходников.
В Visual Studio с помощью одной компиляции lib-файл разве можно получить? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Да File -> New -> Project: C++ -> Win32 Project: Application Setting -> Application Setting -> Application type -> Static Library |
|||
|
||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: нет Всего: 9 |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Не понял |
|||
|
||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: нет Всего: 9 |
Compile (Ctrl+F7). Для проектов любого типа приводит к компиляции текущего исходника.
Build для проектов, например, типа Console приводит к компиляции (compiling) всех исходников и компоновке (linking). То же и для DLL. Сейчас посмотрел - Build для проектов типа стат-библиотека приводит к компиляции всех исходников проекта, а потом происходит нечто, называемое Creating Library. Получается смысл Build меняется в зависимости от типа проекта. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Executable собирает linker, а либы - librarian. Это не компилятор, но и не линкер. Просто складывает в кучу без разрешения внешних ссылок.
Добавлено через 9 минут и 46 секунд Именно так. Ты можешь напихать в проект файлов любого формата со своими обработчиками, и это тоже будет называться "Build" -------------------- ... |
|||
|
||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: нет Всего: 9 |
Если библиотека строится из нескольких исходников, между которыми есть внешние зависимости, то Librarian их, наверное, все-таки стыкует (потому что на этапе "Creating Library" несоответствие внешних зависмостей между исходниками стат-библиотеки приведет к ошибке.) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Нет, формат библиотеки больше похож на OBJ, никакие ссылки там не разрешаются, а ждут линкера.
Например? Не совсем поняла... -------------------- ... |
|||
|
||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: нет Всего: 9 |
Да, мое предыдущее утверждение неправильно (ошибка в конкретном примере возникала по другой причине)!
Спасибо, все понятно! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |