Два варианта:
1) Линковать с флагом -static-libstdc++. В этом случае статическая версия либы будет влинкована в исполняемый файл. Все остальные зависимости можно тоже линковать статически. Что обычно и делают для плагинов. В общем и целом, это очень хороший вариант.
2) Поставлять нужную версию либы с приложением, и линковать с '-Wl,-rpath,$ORIGIN/relative_path_to_lib_dir'. Тоже самое для остальных зависимостей.
Первый вариант может не сработать по некоторым причинам (скорее всего, вас это не коснётся):
1) Если не известно, с какими флагами хост-приложение выполняет dlopen на ваш плагин. Это можно обойти введением ещё одной прослойки без лишних зависимостей, которая будет правильно выполнять dlopen.
2) Лицензии. Что-то может быть нельзя линковать статически, или можно, но с невыгодными для вас условиями.
Во втором варианте тоже могут быть проблемы. Если хост-приложение уже загрузило зависимость, имя и версия которой совпадает с именем и версией зависимости, которая нужна вашему плагину, то зависимость для вашего плагина загружена не будет. Это не проблема, если зависимости не отличаются. Но вот если вы патчиили свои зависимости, то вам придётся их переименовывать и использовать флаг soname. Но опять же, не уверен, что вас эта проблема коснётся.
Добро пожаловать в мир C++ :)
PS
Попробуйте написать ваш плагин на Rust, например. Жизнь скорее всего станет легче.