|
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
|
||||||||||||||||
Предупреждение при создании динамической библиотеки11.01.2021, 19:19. Показов 9192. Ответов 56
Добрый вечер,
У меня мало опыта создания динамических библиотек. Я пытаюсь написать динамическую библиотеку, в качестве системы сборки использую используя CMake. Моя динамическая библиотека задействует Eigen библиотеку и HighFive. Это хэдэр онли библиотеки (но вторая задействует HDF5 библиотеку, которая компилируется отдельно).
warning: C4251: 'MyClass::devCurveGroup': class 'HighFive::Group' needs to have dll-interface Я погуглил и насколько я понял, суть заключается в следующем: внутри класса MyClass я использую шаблонные классы стандартной библиотеки (вероятно внутри HighFive::Group и HighFive: ataSet), которые я пытаюсь экспортировать (так как экспортирую весь класс MyClass ). Шаблонные классы (и функции) в неявном виде (без явной инициализации класса/функции) нельзя экспортировать, отсюда и предупреждение насколько я понимаю. И в результате, если я скомпилирую свой класс MyClass в библиотеку с этим предупреждением, то эту скомпилированную динамическую библиотеку можно использовать только приложениями, собранными моим же компилятором (у меня MSVC 2019 x64) и нельзя путать Release/Debug версии библиотеки.Верно ли это высказывание? Вообще я думал что ни статические, ни динамические библиотеки, собранные компилятором А, не получается использовать с компилятором Б, и нельзя смешивать релиз/дебаг версии библиотек, иначе получаешь ошибки на этапе линковки. class_export.h генерируется с помощью CMake функции:
0
|
||||||||||||||||
| 11.01.2021, 19:19 | |
|
Ответы с готовыми решениями:
56
Вызов функции одной динамической библиотеки из другой динамической библиотеки Ошибка при подключении динамической библиотеки
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 14.01.2021, 20:59 | ||
|
ок, пересмотрю... там, кстати думала, что вы критиковали код оппонента... потому что читала по-диагонали... спасибо за пояснения!.. всё хочу взяться за dll, а выгоды по сравнению со статической компиляцией не вижу пока для себя, поэтому полностью ещё не нашла время проработать эту тему... как руки дойдут - обязательно вернусь к вашим примерам и пояснениям
в технологию производства "ниточек" компилятором ещё не вникала (да, и дела компилятора - пока не мои дела)
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 14.01.2021, 21:08 | |
|
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 14.01.2021, 21:24 | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 15.01.2021, 12:38 | ||
|
ок, пусть будет импорт (со стороны клиента)...
я вот только оставлю ТСу линк, который привлёк моё внимание в связи с чисто абстрактными классами, таблицами, отмеченными выше, и __declspec(novtable) -- касается только Windows (насколько заметила бегло) - раз уж он хочет наследовать от одного класса классы, работающие с разными файлами... Кратко суть:
0
|
||
|
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
|
||||||
| 16.01.2021, 00:01 [ТС] | ||||||
|
Если экспортируемый класс содержит шаблоны методов например:
0
|
||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 16.01.2021, 00:08 | ||
|
1
|
||
|
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
|
|||||||||||
| 16.01.2021, 14:04 [ТС] | |||||||||||
|
Не могу принять решение уже несколько дней.
Вот чистый пример самого моего класса, который я хочу экспортировать в динамическую библиотеку: заголовок:
Если экспортировать мой класс Surf, то я вижу только способ использования указанных сторонних классов (Eigen::MatrixXd и HighFive::Group) только как указателей вместо объектов, но делать этого очень не хочется, так как становится очень непривычно использовать эту библиотеку, для тех, кто работает с матрицами Eigen и HighFive. Второй вариант это забыть про бинарную совместимость. Библиотеку эту планирую выложить в открытом доступе, с возможностью компилировать как static и shared. Может у кого есть четкое решение по данному вопросу с учетом приведенного примера?
0
|
|||||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 16.01.2021, 14:19 | ||
|
1
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 16.01.2021, 14:27 | ||
мне тоже хочется избегать таких неприятностей с моим кодом в общем и целом... что надо учесть, чтобы было универсально?.. или на примере кода ТСа - в чём несовершенство, чтобы не зависеть хотя бы от обновлений компилятора? (не говоря уже о смене компилятора)... и возможно ли по его задаче не зависеть от компилятора?
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 16.01.2021, 14:34 | ||
|
Например - ты здесь используешь класс std::optional, это означает, что реализация этого класса должна быть одинаковая в exe и dll. Ты можешь это гарантировать? Вряд ли. Добавлено через 55 секунд А, JeyCi, извини, не посмотрел, что это ты пишешь, думал, что автор.
1
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
| 16.01.2021, 14:51 | |||
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 16.01.2021, 14:55 | ||
|
Добавлено через 1 минуту В OLE/COM для этих целей сделан IUnknown::QueryInterface, т.е. внешний модуль сам преобразовывает свои указатели.
1
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 16.01.2021, 14:56 | |
|
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 16.01.2021, 14:57 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 16.01.2021, 14:57 | ||
|
спасибо за пояснения
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 16.01.2021, 15:02 | ||
|
1
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 16.01.2021, 15:03 | |
|
можно ли сказать, что универсальны могут быть только экспортированные из dll функции??
в противовес указателям
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 16.01.2021, 15:19 | ||
|
Хотя, я никогда не работал с классами, которые экспортируются из dll (ну, кроме OLE/COM и подобного). Поэтому не знаю современного состояния проблемы. Может там всё нормально.
Добавлено через 1 минуту Добавлено через 13 минут Вообще, правильная стратегия при разработке dll, это рассчитывать на то, что твоя dll и exe, который её подключает, написаны на разных языках программирования. Либо на одном, но dll была сделана двадцать лет назад и, кроме заголовков, никаких исходников нет.
1
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
| 16.01.2021, 15:49 | |||
|
Добавлено через 5 минут весь код на c++ - это одни сплошные функции, даже main()... классы- это лишь абстракции их обслуживающие...
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 16.01.2021, 15:57 | ||
|
В частности, static_cast и dynamic_cast могут возвращать указатель, отличный от переданного. Не говоря о том, что dynamic_cast выполняет проверку в рантайме. В другом модуле всё это может рассчитываться по другим правилам.
0
|
||
| 16.01.2021, 15:57 | |
|
Любимый Visual Studio не хочет поспособствовать мне в создании библиотеки(статической и динамической)
Зачем при создании библиотеки создавать два файла (.h и.cpp) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|