![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Привет!
У меня возник вопрос, став актуальным. Ведь в средах разработки есть куча своих h-файлов и все они лежат в папках типа Include. А где содержится реализация этих функций, прототипы которых они содержат? К примеру, stdio.h. Вообще, какова семантика такого описания? Откуда потом программа, где я делал #include <stdio.h>, знает, как работает printf() |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Народ, или хотя бы ссылочку дайте на хорошую инфу, если есть.
|
|||
|
||||
| Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
в папках типа Lib -------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Слышал о файлах .lib?
Это откомпилированные модули, в них реализация всех функции из .h. Есть несколько lib-ов, которые компилятор подключает сам. Их список можно посмотреть в VC в Project->Setting..., закладка Link в категории General в строке Object/Library Modules. ("kernel32.lib user32.lib gdi32.lib ...") Но туда лучше писать только стандартные библиотеки (просто так принято). В том же Link есть в категории Input строка Additional Library Path. Туда можно прописать путь к твоим lib и дописать их стандартным. Короче, тебе надо создать такой lib файл. И программисты будут включать его в проект. Или оставь cpp. Так они смогут править его. |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
RAN, конечно слышал.
Только я не пойму вот чего... Есть ведь ещё динамические библиотеки, они же DLL. Вот когда я создаю DLL, мне можно к ней h-файл делать? Как вообще взаимосвязаны h, lib и dll (не все друг с другом, конечно)? |
|||
|
||||
| Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
в h описаны правила вызова функций, в lib содержится реализация функции в объектном коде если есть еще и относящаяся к ним dll, то lib содержит код загрузки dll и получения из нее адресов функций при запуске приложения -------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Всё верно. dll - динамическая библиотека, а lib - статическая. Динамическая подключается LoadLibrary, которую вызываешь ты или CRT, а статическая компануется к твоей проге "намертво". Обычно создавая dll, создают к ней ещё и lib. Для этого существуют специальные программы (в пакете VC это утилита lib.exe). Эти программы создают на основе dll статическую библиотеку lib. Которая будет загружать при загрузке твоей программы dll-библиотеку и получит адреса всех необходимых функций. При таком подходе твоя программа без этой dll работать не будет.
Так что ситуация такая: В h описывают функции. В dll или lib их реализуют. Причём lib компануется к твоей программе, увеличивая её размер. И каждая программа использующая такие функции будет иметь свой экземпляр библиотеке. А dll необходимо загружать в память динамически. Причём сколько бы программ не использовало эту dll, лишь один экземпляр библиотеки будет загружен в память. В результате твоя программа короче. Но можно создать lib для dll, скомпоновать её с программой и работать с dll как со статической. Вот |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
RAN, самая загвоздка и заключалась в том, как использовать то, что вложено в dll. Было предчувствие, что для этого как-то lib и используют, но этого сало.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |