1. Оформляете плагины в виде *.so, из которых наружу торчит одна-единственная функция: какая-нибудь «createPlugin()», которая создаёт и возвращает объект, унаследованный от вашего базового класса.
2. Сваливаете все плагины в один заранее известный каталог.
3. В основной программе проходите по всем файлам из этого каталога и грузите плагины функцией dlopen()
4. Имея хэндл либы получаете указатель на вашу функцию «createPlugin» при помощи функции dlsym()
5. Дёргаете функцию, получаете объект «плагин», сохраняете его куда-нибудь в список.
6. Проходитесь по списку и выбираете нужный по весу.
7. Выгружаете ненужные плагины.
Начать курить доку можно
отсюда, а дальше — по ключевым словам.