Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144

В языке C++ есть понятие "динамическая библиотека" ?

17.07.2019, 10:00. Показов 3522. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: научить программу на C++ подключать дополнительный функционал в Run-Time.

В языке C++ вообще, есть понятие динамическая библиотека (типа .DLL в MS-Windows) ?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.07.2019, 10:00
Ответы с готовыми решениями:

Понятие модуль и библиотека в PHP
Объясните, что такое модуль и что такое библиотека в PHP и в чем отличие, в двух словах. Спасибо

Есть ли такое понятие, как Visual C#? Если есть, чем он отличается от обычного C#?
Суть в том, что как только ознакомлюсь с C#, планирую переходить на Unity. Пару раз встречал формулировку Visual C# и вот подумал, а что...

Динамическая библиотека и библиотека импорта
Дали лабораторную, где надо создать динамическую библиотеку, при этом подключить ее в одном случае надо статически, а в другом -...

40
Злостный нарушитель
 Аватар для Verevkin
10340 / 5758 / 1269
Регистрация: 12.03.2015
Сообщений: 26,593
17.07.2019, 10:09
Цитата Сообщение от Artem_Pv Посмотреть сообщение
В языке C++ вообще, есть понятие динамическая библиотека (типа .DLL в MS-Windows) ?
Да.
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
17.07.2019, 10:09
В С++ есть понятие "единица трансляции". Понятие "динамическая библиотека" (библиотека динамической компоновки) относится к уровню ОС. А по сути задачи: копай в сторону функций типа LoadLibrary (если Windows).
1
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
17.07.2019, 11:31  [ТС]
Спасибо за ответ.

Цитата Сообщение от jugu Посмотреть сообщение
А по сути задачи: копай в сторону функций типа LoadLibrary (если Windows).
LoadLibrary - это windows API. К сожалению, не подходит, т.к. не должно быть связи с MS-Windows или другой ОС.

Интересует вопрос:
В стандарт языка C++ входит понятие “динамическая библиотека”, чтоб функционал подключать по требованию в Run-Time ?

Добавлено через 6 минут
Цитата Сообщение от jugu Посмотреть сообщение
В С++ есть понятие "единица трансляции".
Очень близко, но это для Compile-Time.
А мне нужно подключать функционал в режиме Run-Time

Проводя аналогию с "единицей трансляции", это должно называться примерно "единица компиляции" ...
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
17.07.2019, 13:07
В стандарт языка вроде не входит.
Входит в платформо-специфичные библиотеки.
Цитата Сообщение от Artem_Pv Посмотреть сообщение
LoadLibrary - это windows API. К сожалению, не подходит, т.к. не должно быть связи с MS-Windows или другой ОС.
выбор ОС с помощью #ifdef не устраивает? Вряд ли ведь вам нужно вызывать динамические библиотеки на любой среде вплоть до микроконтроллеров с сотней байт оперативки.
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,033
Записей в блоге: 1
17.07.2019, 13:33
Лучший ответ Сообщение было отмечено Artem_Pv как решение

Решение

Цитата Сообщение от Artem_Pv Посмотреть сообщение
т.к. не должно быть связи с MS-Windows
Boost.DLL подойдет?
1
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
17.07.2019, 13:52  [ТС]
Спасибо, я просмотрю возможности Boost.
Но, уже начинаю понимать, что кроссплатформенные библиотеки могут быть только статическими.

Цитата Сообщение от Croessmah Посмотреть сообщение
Boost.DLL подойдет?
А зачем Вы к "Boost" добавили ".DLL" ?
Ведь речь идет: "не должно быть связи с MS-Windows"
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,033
Записей в блоге: 1
17.07.2019, 13:57
Цитата Сообщение от Artem_Pv Посмотреть сообщение
А зачем Вы к "Boost" добавили ".DLL" ?
Потому что оно так называется.
Цитата Сообщение от Artem_Pv Посмотреть сообщение
"не должно быть связи с MS-Windows"
Boost.DLL - кроссплатформенное решение.
0
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
17.07.2019, 14:06  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Boost.DLL - кроссплатформенное решение.
Вижу тему: Plugin basics
Кажется то, что нужно
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
17.07.2019, 14:09
Artem_Pv, любая скомпилированная тобой программа будет "привязана с корнем" в ту операционную систему, для которой она компилировалась. Она никогда не запустится в другой ОС. Поэтому тебе в любом случае нужно отдельно делать релизы для винды, для нужной сборки линукса, для андроида и т.д. Соответственно твои мучения с попыткой сделать "всезапускающееся" приложение бессмысленны.
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,033
Записей в блоге: 1
17.07.2019, 14:12
Цитата Сообщение от Artem_Pv Посмотреть сообщение
подклчается на MacOS и Андроиде?
Угу. Подробнее в документации.
1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
17.07.2019, 14:32
Цитата Сообщение от TRam_ Посмотреть сообщение
Artem_Pv, любая скомпилированная тобой программа будет "привязана с корнем" в ту операционную систему, для которой она компилировалась. Она никогда не запустится в другой ОС.
К ОС привязаны только системные вызовы. Поэтому, если библиотека может обойтись без системных вызовов (может, у вас там числодробилка), то ее вполне можно таскать универсальным бинариком. Хотя, конечно, загружалка для этого бинарика уже будет гвоздями прибита к ОС. И в STL ее в любом случае нет. И таскать бинарик между разными платформами уже не получится.
0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
17.07.2019, 16:07
Цитата Сообщение от Artem_Pv Посмотреть сообщение
В языке C++ вообще, есть понятие динамическая библиотека (типа .DLL в MS-Windows) ?
Нет.
Цитата Сообщение от Artem_Pv Посмотреть сообщение
В стандарт языка C++ входит понятие “динамическая библиотека”, чтоб функционал подключать по требованию в Run-Time ?
Нет.

Цитата Сообщение от Artem_Pv Посмотреть сообщение
LoadLibrary - это windows API. К сожалению, не подходит, т.к. не должно быть связи с MS-Windows или другой ОС.
Это невозможно.
Любое решение (включая boost) так или иначе зависит от АПИ ОС.

Кроссплатформенный boost прячет все зависимости от пользователя.
Но это не значит, что зависимостей нет.

Если вас устраивает кроссплатформенный вариант (а он вас устраивает, если только у вас нет шизофрении),
значит вам может подойти и более простые решения.

Например, основанные на: #ifdef, как уже предлагали выше.


Цитата Сообщение от Renji Посмотреть сообщение
вполне можно таскать универсальным бинариком.
Вы это серьёзно?

У с++ ABI не стандартизировано.
Нет никакой гарантии совместимости статических библиотек.
lib собранная в 2015 студии не совместима с проектом собираемым в 2013, например.
между библиотеками разных компиляторов вообще никогда не было и намека на совместимость.

С динамическими библиотеками дела обстоят получше.
Если не считать того, что динамические заточены под конкретные оси.

Интересно посмотреть, как вы собираетесь загружать число-дробильную dll под линуксами.
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,033
Записей в блоге: 1
17.07.2019, 16:24
Цитата Сообщение от eva2326 Посмотреть сообщение
Вы это серьёзно?
Он о том, что можно собрать подобие jvm.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
17.07.2019, 16:47
Цитата Сообщение от eva2326 Посмотреть сообщение
У с++ ABI не стандартизировано.
Наружу, разумеется, смотрит си-интерфейс, в котором соглашения о вызовах давно стандартизированы. Разве для подгружаемых библиотек есть какие-то иные варианты?
Цитата Сообщение от eva2326 Посмотреть сообщение
Интересно посмотреть, как вы собираетесь загружать число-дробильную dll под линуксами.
Интересно посмотреть чем код быстрого преобразования Фурье под Виндой, отличается от аналогичного под Линуксами.
1) Содержимое библиотеки загружается в фиксированное место виртуального адресного пространства процесса.
2) Процессу передается табличка "функция с именем таким-то, лежит там-то".
3) Вызов функций происходит по стандартному stdcall-соглашению.

Да, динамической памяти и работы с файлами нету, потому что требуется обращение к системному API.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
18.07.2019, 11:14
Цитата Сообщение от Renji Посмотреть сообщение
Разве для подгружаемых библиотек есть какие-то иные варианты?
Формат динамических библиотек такой же, как для исполняемых файлов (elf / pe), то есть платформо-зависимый.
Цитата Сообщение от Renji Посмотреть сообщение
Интересно посмотреть чем код быстрого преобразования Фурье под Виндой, отличается от аналогичного под Линуксами.
Код - ничем. Собранные библиотеки - оформлением. То есть при сильном желании подгрузить их можно, wine с cygwin тому примером, но определенного геморроя это стоит.
0
18.07.2019, 11:35

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
То есть при сильном желании подгрузить их можно, wine с cygwin тому примером
Может я отстал от жизни, но cygwin всегда запускал только ВЕНДОВЫЕ бинарники, собранные из линуксовых сорцов. cygwin1.dll просто обеспечивает некий джентельменский набор посих-API(не ABI). wine - да, запускает под Линем нативные вендовые бинарники.

0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
18.07.2019, 11:40
Цитата Сообщение от Renji Посмотреть сообщение
Интересно посмотреть чем код быстрого преобразования Фурье под Виндой, отличается от аналогичного под Линуксами.
Нет. Не интересно.
Когда я писала:
Цитата Сообщение от eva2326 Посмотреть сообщение
Интересно посмотреть, как вы собираетесь загружать число-дробильную dll под линуксами.
То имела ввиду демонстрацию техники на практике.

Либо вы можете продемонстрировать как легко и просто:
Цитата Сообщение от Renji Посмотреть сообщение
вполне можно таскать универсальным бинариком
Либо ваши слова не стоит рассматривать всерьёз.

Голословное бла-бла-бла - не интересно.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.07.2019, 12:15
Цитата Сообщение от eva2326 Посмотреть сообщение
То имела ввиду демонстрацию техники на практике.
На практике это называется инжектом кода в процесс.
Сборка: собираете библиотеку в com-формате "в файле только код для загрузки по адресу 0x12345678 и больше ничего". Каюсь, какие для этого нужны ключики gcc не помню.

Загрузка под Виндой: выделяете память через VirtualAlloc по вышеозначенному адресу 0x12345678. Вызываете VirtualProtect с флагом PAGE_EXECUTE_READWRITE чтобы получить права на исполнение. Загружаете код библиотеки. Конец истории.
Загрузка под Линуксом: абсолютно тоже самое, только функции называются mmap и mprotect.
0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
18.07.2019, 12:33
Цитата Сообщение от Renji Посмотреть сообщение
На практике это называется инжектом кода в процесс.
Сборка: собираете библиотеку в com-формате "в файле только код для загрузки по адресу 0x12345678 и больше ничего". Каюсь, какие для этого нужны ключики gcc не помню.
Загрузка под Виндой: выделяете память через VirtualAlloc по вышеозначенному адресу 0x12345678. Вызываете VirtualProtect с флагом PAGE_EXECUTE_READWRITE чтобы получить права на исполнение. Загружаете код библиотеки. Конец истории.
Загрузка под Линуксом: абсолютно тоже самое, только функции называются mmap и mprotect.
У вас какие то сложности с пониманием русского текста?

Цитата Сообщение от eva2326 Посмотреть сообщение
Либо вы можете продемонстрировать
Цитата Сообщение от eva2326 Посмотреть сообщение
Либо ваши слова не стоит рассматривать всерьёз.
Голословное бла-бла-бла - не интересно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.07.2019, 12:33
Помогаю со студенческими работами здесь

Динамическая библиотека
Обращаюсь снова к вам за помощью, есть 2 программы, методы которых нужно реализовать в динамической библиотеке. Суть обращения к...

Динамическая библиотека
Как создать динамическую библиотеку, Объясните пожалуйста все пошагово. На Visual С++

Динамическая библиотека
Всем привет. Надо подключить библиотеку а) статически б)динамически И траблы есть с обоими пунктами. А) когда я подключаю...

Динамическая Библиотека
Имеется динамическая библиотека Windows (Dynamic Link Library ".dll"). В ней написаны функции, классы и структуры. Каким образом мне...

Динамическая библиотека
Создать динамическую библиотеку, которая содержит функции преобразования строки символов из прописных в строчные и наоборот. Очередное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru