Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стат библиотека: компиляция/линковка, Вопрос по информации из MSDN 
V
    Опции темы
FCM
Дата 27.11.2009, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



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

Возникает вопрос, почему не упомянута статическая библиотека?
Разве можно ее построить только компилированием - линковка же при ее построении тоже нужна.
 
PM MAIL   Вверх
jimbo
Дата 27.11.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

Репутация: нет
Всего: нет



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

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

длл - тоже нуждается. так как грузиться может в любой адрес, в завимимости от свободного, можно конечно настроить так, чтобы грузилась в один и тот же, но тогда не всегда можно будет воспользоваться такой либой.
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
xvr
Дата 27.11.2009, 12:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



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

PM MAIL   Вверх
FCM
Дата 27.11.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



Статическая библиотека может собираться из нескольких исходников.
В Visual Studio с помощью одной  компиляции lib-файл разве можно получить? 
PM MAIL   Вверх
xvr
Дата 27.11.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



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

Да
File -> New -> Project: C++ -> Win32 Project: Application Setting -> Application Setting -> Application type -> Static Library
 
PM MAIL   Вверх
FCM
Дата 27.11.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



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


Как создать проект типа Static Library я знаю.
Но при этом при компиляции .lib-файл не будет создан. Только после команды Build.
PM MAIL   Вверх
xvr
Дата 27.11.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



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

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

PM MAIL   Вверх
FCM
Дата 27.11.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



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

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

PM MAIL   Вверх
Earnest
Дата 27.11.2009, 18:38 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



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

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

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


--------------------
...
PM   Вверх
FCM
Дата 27.11.2009, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



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


Если библиотека строится  из нескольких исходников, между которыми есть внешние зависимости, то Librarian их, наверное, все-таки стыкует (потому что на этапе "Creating Library" несоответствие внешних зависмостей между исходниками стат-библиотеки приведет к ошибке.)
 
PM MAIL   Вверх
Earnest
Дата 27.11.2009, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



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

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


--------------------
...
PM   Вверх
FCM
Дата 27.11.2009, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



Да, мое предыдущее утверждение неправильно (ошибка в конкретном примере возникала по другой причине)!
Спасибо, все понятно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.