Кроссплатформенный загрузчик динамических библиотек C++
Мне было просто интересно, какие у меня были варианты кросс-платформенных реализаций для динамической загрузки плагинов с использованием разделяемых библиотек. Пока единственное, что я нашел, это:
И мне просто интересно, есть ли у меня другие варианты? По сути, я хочу иметь возможность размещать плагины в общих объектных файлах и загружать их во время выполнения, и я хотел сделать это кроссплатформенным способом C++.
Редактировать: я нашел этот пост доктора Доббса с 2007 года; конечно, кто-то придумал что-то большее с тех пор.
3 ответа
Вы можете посмотреть в Boost Extension, хотя он еще не был принят в Boost.
Библиотека Boost.Extension была разработана для облегчения разработки плагинов и аналогичных расширений программного обеспечения с использованием разделяемых библиотек. Классы, функции и данные могут быть доступны из общих библиотек и загружены приложением.
Qt имеет хорошую систему плагинов. Вы должны взглянуть на вторую часть этой страницы.
Если вы хотите что-то простое и легкое попробуйте: https://pocoproject.org/docs/package-Foundation.SharedLibrary.html
Используя класс SharedLibrary, требуется три строки для вызова функции в общей библиотеке C:
Poco::SharedLibrary lib("libfoo.so");
int (* foo)(int) = reinterpret_cast<int (*)(int)>(lib.getSymbol("foo"));
printf("answer %d\n", foo(5));