Ответ:Некоторые платформы позволяют одновременные вызовы<dlopen>, как функции. Для тех платформ, которые растут. DLL безопасен, как и весь C++ Стандартные библиотечные контейнеры: безопасно использовать различные экземпляры общей библиотеки из разных потоков, даже если все экземпляры загружают одну и ту же библиотеку. На других платформах небезопасно одновременно вызывать любую из функций от Boost. DLL (даже вызов<shared_library::location()>вызывает состояние гонки). См.Ограничения, Загрузка библиотечной нити.
Вопрос:Почему символы Linux из одного плагина видны в другом? Невозможно получить символ с тем же именем из правильного плагина!
Ответ:Вы столкнулись с проблемой тени символов. Составьте свои плагины с флагом «-fvisibility=hidden» и загляните в раздел «Обучение».
Вопрос:Как управляется Unicode (Windows)?
Ответ:Усиление. DLL поддерживает Unicode, чтобы вы могли предоставить ему пути Unicode.
Вопрос:Могу ли я открыть исполняемый файл?
Ответ:Да, можешь. Символы должны экспортироваться с использованием исполняемого файла<BOOST_SYMBOL_EXPORT>или<BOOST_DLL_ALIAS>. Вы можете позвонить<shared_library(program_location())>, чтобы загрузить себя. Обратитесь к разделу учебник для получения дополнительной информации. Вы также можете запросить исполняемые файлы, просто предоставьте путь к исполняемому классу<library_info>.
Вопрос:Что, если я укажу неправильный тип в<shared_library::get<T>>или<import<T>>?
Ответ:Обычно вы заканчиваете<SegmentationFault>. Однако безопасно делать типы более строгими, например, делать<constint>из<int>не повредит.
Вопрос:Гарантирует ли ваша библиотека стабильность методов?
Ответ:Библиотека гарантирует, что имена псевдонимов, созданные с использованием макросов<BOOST_DLL_ALIAS>, не изменятся с изменением компилятора или платформы. Вы должны самостоятельно позаботиться о стабильности функций ABI и API.
Вопрос:Существуют ли какие-либо ограничения на подпись экспортируемых/импортируемых функций?
Ответ:Нет. Вы можете импортировать / экспортировать функции с любой подписью и любым параметром возврата.
Вопрос:У меня есть 2 плагина, которые используют одну и ту же общую библиотеку. Будет ли разделяемая библиотека загружена дважды?
Вопрос:У меня есть 2 плагина, каждый из которых должен работать с собственной версией<libsome_library>общей библиотеки. Как этого добиться?
Ответ:Избегайте таких ситуаций, статично связывая libsome_library в каждый плагин и загружая плагины<load_mode::rtld_deepbind>.
Вопрос:Как загрузить общий объект из памяти??
Ответ:Все существующие операционные системы избегают загрузки общих библиотек непосредственно из пользовательской памяти, поэтому вы не найдете никаких сискалов для такого случая. В настоящее время Boost.DLL не предоставляет средств для честной загрузки общих объектов из памяти. Это требует повторного внедрения динамической линкерной логики в пользовательском пространстве для всех платформ, что является огромным объемом работы и очень подвержено ошибкам. Однако рабочие патчи приветствуются!
Workaround будет писать плагин во временный файл в оперативной памяти и загружать плагин из него:
Статья F.A.Q. раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 11. Boost.DLL может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.