Скорее всего дело в различии между механизмами разрешения имен динамических библиотек: в Windows первым делом проверяется текущий каталог, затем системные папки, и указанные в переменной %PATH%, под Linux по умолчанию проверки текущего каталога нет, но можно включить командой
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
. Другой путь, это загрузка зависимостей через QLibrary::load.
И пара цитат из assistant:
QPluginLoader::~QPluginLoader ()
Destroys the QPluginLoader object.
Unless unload() was called explicitly, the plugin stays in memory until the application terminates.
Так что QPluginLoader можно спокойно создавать на стеке.
QString QPluginLoader::errorString () const
Returns a text string with the description of the last error that occurred.
Поможет проще диагностировать проблемы с загрузкой плагинов.