![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| КунгФуЧайник |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
Гуглил. Правильно ли понял варианты подключения к своему коду библиотеки?
1. Если библиотека в .lib-файле, в коде написать
2. Если библиотека в .dll-файле, то нужен .h-файл и .lib-файл, и в коде написать
И после этого можно вызывать функции из этой библиотеки. |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
В обоих случаях нужно:
Разумеется, кроме Some.dll или Some.lib, нужно иметь Some.h Когда собирается Some.dll, вместе с ней создается Some.lib Иногда из Some.dll можно восстановить Some.lib, но не всегда. Some.lib нужно подключить к проекту и указать пути до Some.lib и Some.h Some.dll нужно разместить в том же каталоге, что и .exe или указать путь до него в PATH. |
|||
|
||||
| КунгФуЧайник |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
math64, понял, спасибо.
Названия .h, .lib и .dll могут не совпадать? Сейчас смотрю библиотеку SDL2. Eсть sdl2.dll, sdl2.lib, а sdl2.h - нет, есть просто sdl.h. Компилятору указывается путь на заголовочные файлы, а линковщику - на библиотеки и срр-файлы? |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Компилятру указывется путь на заголовочные файлы (обычно используется ключ -I) и список .cpp Он делает из них объектные файлы (.o или .obj) Линковщик берёт объектные файлы и библиотеки (которые тоже являются объектными файлами, объединеными в один) и делает исполняемый файл или .dll + библиотеку импорта.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Название *.h файла не имеет значения. *.lib по идее тоже, но обычно dll и lib называют одинаково, если это не так, то это повод чтобы все перепроверить. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| КунгФуЧайник |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
math64, Alexeis, спасибо.
|
|||
|
||||
| КунгФуЧайник |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
Поторопился закрыть тему - появился вопрос. Сначала уточню, правильно ли понял.
Т.е. если речь о библиотеке ( .h и .cpp), то компилятор берет только .h, потому что .cpp - нет. Получается, он может компилировать .h-файлы отдельно от .cpp? Или он не может, а всегда так делает: .h-файлы отдельно, .cpp-файлы - отдельно, а линковщик потом их собирает вместе в один exe? |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Нет, заголовки не компилируются. Хотя компилятору безразлично, какое расширение у файла - если попросишь откомилирует и заголовок, но как правило, это бессмысленно.
Имена .cpp и библиотек указываются в командной строке компилятора:
Если пользуешься IDE, вызов компилятора скрыт от тебя. Заголовок ищется, если встретится #include. -Iinclude указывает где его искать. Имя заголвка берётся из директивы #include Если при линковке встретится неопределённый символ, он ищется в библиотеках, заданных -llib1.lib, путь до них задается -Llib Библиотека может быть обычной, статической, тогда ее код (только используемые части) включается в project.exe или библиотекой импорта, которая связывает .exe c .dll Кроме того, можно загрузить .dll динамически, так загружаются плагины. |
|||
|
||||
| КунгФуЧайник |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
math64, погуглил. Заголовки копируются в файл с кодом вместо #include.
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Технически, когда препоцессор встречает #include, он заменяет эту строчку на содержимое заголовка. Поскольку препроцессор встроен в компилятор, промежуточный файл не создается (или создается по запросу)
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |