Библиотеки, которые вы связываете во время выполнения, на самом деле не должны быть слишком важными для вашей программы;скорее, они должны быть на «концах листа», если хотите.Особенно библиотеки общего назначения обычно демонстрируют только функции, которые выполняют одну конкретную задачу (например, шифрование чего-либо).
Подумайте об этом, все, что вы можете импортировать из библиотеки во время выполнения, - это одна функция.Библиотека не может знать о состоянии всей вашей программы и осмысленно взаимодействовать с ней.
Все сводится к дизайну.Если вы проектируете библиотеку самостоятельно и хотите, чтобы хотели *1006* составные части вашей программы загружаться во время выполнения, вам необходимо предоставить большое количество интерфейсов обратного вызова.Но если библиотека тесно связана, вы можете рассмотреть возможность ее непосредственного подключения к основной программе.
Наконец, поскольку интерфейс в стиле dlopen
обрабатывает только указатели на функции в стиле C, вы по существу ограниченыинтерфейс в стиле CВы можете передать указатели на функции, если хотите, но посмотрите выше на соображения, приводит ли это к хорошему дизайну.Наличие интерфейса C ++ (например, экспорт функций, которые принимают классы по ссылкам) намного сложнее, потому что вы должны будете убедиться, что библиотека (и все будущие воплощения сторонних поставляемых библиотек) соответствуют одному и тому же ABI, а также C ++ ABIявляется гораздо более сложным и подверженным изменениям, чем C ABI.
Подумайте об этом так: используйте загрузку во время выполнения, если вы хотите использовать архитектуру плагинов, для которой третьи стороны могут позже написать код, которыйиспользуется вашей программой.Если это не имеет смысла, используйте обычные ссылки во время компиляции.