> I think they might be duplicating the base class in each plugin.

The plugin links dynamically with libmeegomtp.so.1 that contains the base class symbols:

    $ nm -D /usr/lib/libmeegomtp.so.1 | c++filt | grep meegomtp1dot0::StoragePlugin::
    000790d0 T meegomtp1dot0::StoragePlugin::qt_metacall(QMetaObject::Call, int, void**)
    0007905c T meegomtp1dot0::StoragePlugin::qt_metacast(char const*)
    00079238 T meegomtp1dot0::StoragePlugin::objectHandle(unsigned int&)
    000791ac T meegomtp1dot0::StoragePlugin::eventGenerated(unsigned short, QVector<unsigned int> const&)
    00091f68 D meegomtp1dot0::StoragePlugin::staticMetaObject
    00079364 T meegomtp1dot0::StoragePlugin::storagePluginReady(unsigned int)
    ...

I see no reason why linker should copy those to the plugin library. I guess it shouldn't even see the definitions of those methods while creating libfsstorage.so or any other plugin.

It's worth trying, but doesn't have to be done now :).

> I assume you mean the static method would also use a static variable.

Of course.