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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ликбез о подключении библиотеки, .lib, .dll, .h 
:(
    Опции темы
КунгФуЧайник
Дата 1.12.2015, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Гуглил. Правильно ли понял варианты подключения к своему коду библиотеки?
1. Если библиотека в .lib-файле, в коде написать
Код

 #include<Some.lib>

2. Если библиотека в .dll-файле, то нужен .h-файл и .lib-файл, и в коде написать 
Код

#include<Some.h>

И после этого можно вызывать функции из этой библиотеки.

PM MAIL   Вверх
math64
Дата 1.12.2015, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



В обоих случаях нужно:
Код

#include<Some.h>

Разумеется, кроме Some.dll или Some.lib, нужно иметь Some.h
Когда собирается Some.dll, вместе с ней создается Some.lib Иногда из Some.dll можно восстановить Some.lib, но не всегда.
Some.lib нужно подключить к проекту и указать пути до  Some.lib и  Some.h
 Some.dll нужно разместить в том же каталоге, что и .exe или указать путь до него в PATH.
PM   Вверх
КунгФуЧайник
Дата 1.12.2015, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



math64, понял, спасибо.

Названия .h, .lib и .dll могут не совпадать? Сейчас смотрю библиотеку SDL2. Eсть sdl2.dll, sdl2.lib, а sdl2.h - нет, есть просто sdl.h.

Компилятору указывается путь на заголовочные файлы, а линковщику - на библиотеки и срр-файлы?
PM MAIL   Вверх
math64
Дата 1.12.2015, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Компилятру указывется путь на заголовочные файлы (обычно используется ключ -I) и список .cpp Он делает из них объектные файлы (.o или .obj) Линковщик берёт объектные файлы и библиотеки (которые тоже являются объектными файлами, объединеными в один) и делает исполняемый файл или .dll + библиотеку импорта.
PM   Вверх
Alexeis
Дата 1.12.2015, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(КунгФуЧайник @  1.12.2015,  16:41 Найти цитируемый пост)
Названия .h, .lib и .dll могут не совпадать? Сейчас смотрю библиотеку SDL2. Eсть sdl2.dll, sdl2.lib, а sdl2.h - нет, есть просто sdl.h.

Название *.h файла не имеет значения. *.lib по идее тоже, но обычно  dll и lib называют одинаково, если это не так, то это повод чтобы все перепроверить.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
КунгФуЧайник
Дата 1.12.2015, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



math64, Alexeis, спасибо.
PM MAIL   Вверх
КунгФуЧайник
Дата 14.12.2015, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Поторопился закрыть тему - появился вопрос. Сначала уточню, правильно ли понял.
 
Цитата(math64 @  1.12.2015,  15:50 Найти цитируемый пост)
Компилятру указывется путь на заголовочные файлы (обычно используется ключ -I) и список .cpp... Линковщик берёт объектные файлы и библиотеки

Т.е. если речь о библиотеке ( .h и .cpp), то компилятор берет только .h, потому что .cpp - нет. Получается, он может компилировать .h-файлы отдельно от .cpp? Или он не может, а всегда так делает: .h-файлы отдельно, .cpp-файлы - отдельно, а линковщик потом их собирает вместе в один exe?
PM MAIL   Вверх
math64
Дата 15.12.2015, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Нет, заголовки не компилируются. Хотя компилятору безразлично, какое расширение у файла - если попросишь откомилирует и заголовок, но как правило, это бессмысленно.
Имена .cpp и библиотек указываются в командной строке компилятора:
Код

gcc -oproject.exe -Iinclude -Llib file1.cpp file2.cpp -llib1.lib -llib2.lib

Если пользуешься IDE, вызов компилятора скрыт от тебя.
Заголовок ищется, если встретится #include. -Iinclude указывает где его искать. Имя заголвка берётся из директивы #include
Если при линковке встретится неопределённый символ, он ищется в библиотеках, заданных -llib1.lib, путь до них задается -Llib
Библиотека может быть обычной, статической, тогда ее код (только используемые части) включается в project.exe
или библиотекой импорта, которая связывает .exe c .dll
Кроме того, можно загрузить .dll динамически, так загружаются плагины.
PM   Вверх
КунгФуЧайник
Дата 15.12.2015, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



math64, погуглил. Заголовки копируются в файл с кодом вместо #include. 
PM MAIL   Вверх
math64
Дата 16.12.2015, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Технически, когда препоцессор встречает #include, он заменяет эту строчку на содержимое заголовка. Поскольку препроцессор встроен в компилятор, промежуточный файл не создается (или создается по запросу)
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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