|
4 / 4 / 0
Регистрация: 28.10.2015
Сообщений: 51
|
|||||||||||
Включение библиотеки в библиотеку31.01.2017, 01:12. Показов 5023. Ответов 6
Метки нет (Все метки)
Здравствуйте, в процессе изучения opengl, решил создать свой простенький фреймворк, чтобы не таскать из проекта в проект кучу библиотек, и не переписывать по сто раз один и тот же код для создания окна, обработки ввода, загрузки ресурсов и прочее, захотелось объединить это всё в одну статическую библиотеку.
Для теста создал библиотеку для создания окна при помощи GLFW. Создал пустой проект, в настройках выбрал Configuration type - static library, в разделе C/C++ Additional indclude derictories указал адрес папки include библиотеки GLFW, в разделе Librarian прописал зависимости и путь к папке с либами. Накидал такой код Кликните здесь для просмотра всего текста
.h
Скомпелировал все нормально, в новом проекте подключаю эту библиотеку, он мне пишет Error C1083 Cannot open include file: 'glfw3.h': No such file or directory Я подключаю к этому проекту непосредственно GLFW - всё работает. В общем моя библиотека работает на половину, т.е. работает мой код, но всё равно приходится вручную подключать к новому проекту все библиотеки которые включены в мою библиотеку. Скажите как правильно включать библиотеки в другие библиотеки, очень не хочется таскать все эти сопли.
0
|
|||||||||||
| 31.01.2017, 01:12 | |
|
Ответы с готовыми решениями:
6
Включение библиотеки Ошибка при подключении библиотеки: "Не удается открыть включение" Ссылка на библиотеку из библиотеки |
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
|
||
| 31.01.2017, 01:23 | ||
glfw3.h? Или о подключении именно скомпилированных библиотек?На всякий случай замечу, что glfw3.h - это никакая не "библиотека", и "библиотекой" никогда не называлось.
0
|
||
|
4 / 4 / 0
Регистрация: 28.10.2015
Сообщений: 51
|
||
| 31.01.2017, 03:04 [ТС] | ||
|
Сразу оговорюсь я не спец в плюсах, а уж тем более в его инфраструктуре, попробую объяснить проблему на примере описанном выше, я создал статическую библиотеку которая включает класс для работы с окном и библиотеку glfw, подключил полученную библиотеку к новому проекту, а он ругается что не подключена glfw, и заставляет меня подключить glfw непосредственно к новому проекту, почему? Ведь она по идее должна быть включена в мою библиотеку, и чтобы всё работало мне опять же по идее нужно всего лишь подключить к проекту свою библиотеку.
0
|
||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
|
||
| 31.01.2017, 03:37 | ||
Сообщение было отмечено Gypnori как решение
РешениеПоэтому мне в упор не ясно, что вы имеете в виду под "подключил полученную библиотеку к новому проекту". Подключать вы можете что угодно и куда угодно, но каждая библиотека все равно будет собираться независимо. И подключать все требуемые библиотеки придется потом по одной в финальный проект выполняемого файла. Если вы каким-то образом хотите буквально включить уже существующую библиотеку в новую, более широкую библиотеку, тот тут придется делать какие-то специальные телодвижения, т.е. специально заказывать такое необычное дейсивие. В самом примитивном варианте: распаковываем включаемую библиотеку обратно на объектные файлы, а потом уже снова упаковываем новую - расширенную - библиотеку как из старых объектных файлов, так и из ваших добавленных объектных файлов. Но это извращение. Так просто не делают. О каком-то физическом вкладывании библиотек друг в друга может идти речь при компиляции динамичекой библиотеки (DLL, .so и т.п.), но у вас, как я понимаю, речь идет не об этом.
1
|
||
|
4 / 4 / 0
Регистрация: 28.10.2015
Сообщений: 51
|
||
| 31.01.2017, 04:02 [ТС] | ||
|
Спасибо за объяснение, сейчас читаю документацию SFML, помню что в неё было включено множество сторонних библиотек, тут как раз написано что при статическом связывании, все сторонние модули подключаются отдельно.
0
|
||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
|
||
| 31.01.2017, 04:24 | ||
#pragma comment(lib, <имя файла библиотеки>) прямо в исходном коде, а не через настройки компилятора. В некоторых случаях такой способ может оказаться полезным, в том смысле, что такую #pragma можно поместить прямо в заголовочный файл вашей библиотеки (а также включить #pragma для всех библиотек, которые ей еще нужны), и в результате создастся некое подобие автоматического подключения всех необходимых библиотек без каких-либо усилий с вашей стороны. Подключил заголовочный файл - и вместе с ним автоматически подключились все библиотеки.Подлежащий механизм при этом остается традиционным, т.е. физически библиотеки будут подключаться на самом верхнем уровне - при построении выполняемого файла. Ну и пути к местоположениям библиотечных файлов все равно надо будет настраивать.
1
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 31.01.2017, 15:03 | |||||||
|
это просто архив объектных файлов. там внутри - кучка обжей. что значит "объединить две статические либы"? это значит разобрать архив на запчасти, повыковыривав из них обжи, а потом пересобрать lib заново, запихав все эти обжи в одну либку. теперь как это можно сделать? я такое проделывал только в вижуал студии. 1. там если полазить в настройках есть опция "влинковать все зависимости" 2. как вам уже сказали выше: #pragma comment(lib, <имя файла библиотеки>)3. относительно универсальный способ: смотрим в сторону линкера. линкер вижуал студии под название lib.exe умеет это делать: https://msdn.microsoft.com/ru-... b885t.aspx на cmake я делал это так:
1
|
|||||||
| 31.01.2017, 15:03 | |
|
Помогаю со студенческими работами здесь
7
ошибка при включение собственной библиотеки в проект Включение динамической библиотеки под Windows x32 и Android - NEED HELP Подключение статической библиотеки, которая сама в себя включает другую статическую библиотеку Включение пункта меню после включение чекбокса
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|