[mythtv] Current HEAD build broken

roger roger at beardandsandals.co.uk
Tue Apr 25 19:53:26 UTC 2017


Hi People,

I am getting this on building the current master head.

backendsettings.o: In function `BackendSettings::BackendSettings()':
/home/roger/mythdev/mythtv/mythtv/programs/mythtv-setup/backendsettings.cpp:901: 
undefined reference to `vtable for BackendSettings'
/home/roger/mythdev/mythtv/mythtv/programs/mythtv-setup/backendsettings.cpp:901: 
undefined reference to `vtable for BackendSettings'
backendsettings.o: In function `BackendSettings::~BackendSettings()':
/home/roger/mythdev/mythtv/mythtv/programs/mythtv-setup/backendsettings.cpp:1189: 
undefined reference to `vtable for BackendSettings'
/home/roger/mythdev/mythtv/mythtv/programs/mythtv-setup/backendsettings.cpp:1189: 
undefined reference to `vtable for BackendSettings'

I am building on 64bit Ubuntu Zesty against Qt 5.7.1.

Here are some symbol dumps.

roger at dragon:~/mythdev/mythtv/mythtv/programs/mythtv-setup$ nm -C backendsettings.o|grep BackendSettings
0000000000009ade T BackendSettings::listenChanged()
00000000000099ce T BackendSettings::masterBackendChanged()
000000000000a180 T BackendSettings::Load()
000000000000a386 T BackendSettings::Save()
00000000000081b2 T BackendSettings::BackendSettings()
00000000000081b2 T BackendSettings::BackendSettings()
000000000000a8aa T BackendSettings::~BackendSettings()
000000000000a784 T BackendSettings::~BackendSettings()
000000000000a784 T BackendSettings::~BackendSettings()
0000000000000000 W QMetaObject::Connection QObject::connect<void (BooleanSetting::*)(bool), void (BackendSettings::*)()>(QtPrivate::FunctionPointer<void (BooleanSetting::*)(bool)>::Object const*, void (BooleanSetting::*)(bool), QtPrivate::FunctionPointer<void (BackendSettings::*)()>::Object const*, void (BackendSettings::*)(), Qt::ConnectionType)
0000000000000000 W QMetaObject::Connection QObject::connect<void (Setting::*)(QString const&), void (BackendSettings::*)()>(QtPrivate::FunctionPointer<void (Setting::*)(QString const&)>::Object const*, void (Setting::*)(QString const&), QtPrivate::FunctionPointer<void (BackendSettings::*)()>::Object const*, void (BackendSettings::*)(), Qt::ConnectionType)
0000000000000000 W QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (BackendSettings::*)()>::call(void (BackendSettings::*)(), BackendSettings*, void**)
0000000000000000 W QtPrivate::QSlotObject<void (BackendSettings::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
0000000000000000 W QtPrivate::QSlotObject<void (BackendSettings::*)(), QtPrivate::List<>, void>::QSlotObject(void (BackendSettings::*)())
0000000000000000 W QtPrivate::QSlotObject<void (BackendSettings::*)(), QtPrivate::List<>, void>::QSlotObject(void (BackendSettings::*)())
0000000000000000 n QtPrivate::QSlotObject<void (BackendSettings::*)(), QtPrivate::List<>, void>::QSlotObject(void (BackendSettings::*)())
0000000000000000 W QtPrivate::QSlotObject<void (BackendSettings::*)(), QtPrivate::List<>, void>::~QSlotObject()
0000000000000000 W QtPrivate::QSlotObject<void (BackendSettings::*)(), QtPrivate::List<>, void>::~QSlotObject()
0000000000000000 n QtPrivate::QSlotObject<void (BackendSettings::*)(), QtPrivate::List<>, void>::~QSlotObject()
0000000000000000 W void QtPrivate::FunctionPointer<void (BackendSettings::*)()>::call<QtPrivate::List<>, void>(void (BackendSettings::*)(), BackendSettings*, void**)
000000000000a37c T non-virtual thunk to BackendSettings::Load()
000000000000a77b T non-virtual thunk to BackendSettings::Save()
000000000000a8d2 T non-virtual thunk to BackendSettings::~BackendSettings()
000000000000a8a0 T non-virtual thunk to BackendSettings::~BackendSettings()
                  U vtable for BackendSettings

roger at dragon:~/mythdev/mythtv/mythtv/libs/libmyth$ nm -C mythconfigdialogs.o|grep ConfigurationWizard
0000000000000940 T ConfigurationWizard::dialogWidget(MythMainWindow*, char const*)
0000000000000000 W ConfigurationWizard::ConfigurationWizard()
0000000000000000 W ConfigurationWizard::ConfigurationWizard()
0000000000000000 n ConfigurationWizard::ConfigurationWizard()
0000000000000000 W ConfigurationWizard::~ConfigurationWizard()
0000000000000000 W ConfigurationWizard::~ConfigurationWizard()
0000000000000000 W ConfigurationWizard::~ConfigurationWizard()
0000000000000000 n ConfigurationWizard::~ConfigurationWizard()
0000000000000000 V typeinfo for ConfigurationWizard
0000000000000000 V typeinfo name for ConfigurationWizard
0000000000000000 V vtable for ConfigurationWizard

roger at dragon:~/mythdev/mythtv/mythtv/libs/libmyth$ nm -C mythconfigdialogs.o|grep ConfigurationDialog
00000000000003c8 T ConfigurationDialog::dialogWidget(MythMainWindow*, char const*)
0000000000000644 T ConfigurationDialog::exec(bool, bool)
0000000000000000 W ConfigurationDialog::Load()
0000000000000000 W ConfigurationDialog::Save(QString)
0000000000000000 W ConfigurationDialog::Save()
0000000000000000 W ConfigurationDialog::byName(QString const&)
000000000000079c T ConfigurationDialog::addChild(Configurable*)
00000000000007de T ConfigurationDialog::setLabel(QString const&)
0000000000000000 W ConfigurationDialog::ConfigurationDialog()
0000000000000000 W ConfigurationDialog::ConfigurationDialog()
0000000000000000 n ConfigurationDialog::ConfigurationDialog()
00000000000003a0 T ConfigurationDialog::~ConfigurationDialog()
000000000000030e T ConfigurationDialog::~ConfigurationDialog()
000000000000030e T ConfigurationDialog::~ConfigurationDialog()
00000000000000fa T ConfigurationDialogWidget::keyPressEvent(QKeyEvent*)
                  U ConfigurationDialogWidget::editButtonPressed()
                  U ConfigurationDialogWidget::deleteButtonPressed()
0000000000000000 W ConfigurationDialogWidget::ConfigurationDialogWidget(MythMainWindow*, char const*)
0000000000000000 W ConfigurationDialogWidget::ConfigurationDialogWidget(MythMainWindow*, char const*)
0000000000000000 n ConfigurationDialogWidget::ConfigurationDialogWidget(MythMainWindow*, char const*)
0000000000000000 V typeinfo for ConfigurationDialog
0000000000000000 V typeinfo name for ConfigurationDialog
0000000000000000 V vtable for ConfigurationDialog
                  U vtable for ConfigurationDialogWidget

roger at dragon:~/mythdev/mythtv/mythtv/libs/libmyth$ nm -C mythconfigdialogs.o|grep ConfigurationDialogWidget
00000000000000fa T ConfigurationDialogWidget::keyPressEvent(QKeyEvent*)
                  U ConfigurationDialogWidget::editButtonPressed()
                  U ConfigurationDialogWidget::deleteButtonPressed()
0000000000000000 W ConfigurationDialogWidget::ConfigurationDialogWidget(MythMainWindow*, char const*)
0000000000000000 W ConfigurationDialogWidget::ConfigurationDialogWidget(MythMainWindow*, char const*)
0000000000000000 n ConfigurationDialogWidget::ConfigurationDialogWidget(MythMainWindow*, char const*)
                  U vtable for ConfigurationDialogWidget

roger at dragon:~/mythdev/mythtv/mythtv/libs/libmythbase$ nm -C mythstorage.o|grep Storage
00000000000015e2 T HostDBStorage::HostDBStorage(StorageUser*, QString const&)
00000000000015e2 T HostDBStorage::HostDBStorage(StorageUser*, QString const&)
0000000000000000 W HostDBStorage::~HostDBStorage()
0000000000000000 W HostDBStorage::~HostDBStorage()
0000000000000000 W HostDBStorage::~HostDBStorage()
0000000000000000 n HostDBStorage::~HostDBStorage()
0000000000001c94 T GlobalDBStorage::GlobalDBStorage(StorageUser*, QString const&)
0000000000001c94 T GlobalDBStorage::GlobalDBStorage(StorageUser*, QString const&)
0000000000000000 W GlobalDBStorage::~GlobalDBStorage()
0000000000000000 W GlobalDBStorage::~GlobalDBStorage()
0000000000000000 W GlobalDBStorage::~GlobalDBStorage()
0000000000000000 n GlobalDBStorage::~GlobalDBStorage()
000000000000102c T SimpleDBStorage::SetSaveRequired()
0000000000000000 T SimpleDBStorage::Load()
0000000000000488 T SimpleDBStorage::Save(QString)
0000000000000ce0 T SimpleDBStorage::Save()
0000000000000000 W SimpleDBStorage::SimpleDBStorage(StorageUser*, QString, QString)
0000000000000000 W SimpleDBStorage::SimpleDBStorage(StorageUser*, QString, QString)
0000000000000000 n SimpleDBStorage::SimpleDBStorage(StorageUser*, QString, QString)
0000000000000000 W SimpleDBStorage::~SimpleDBStorage()
0000000000000000 W SimpleDBStorage::~SimpleDBStorage()
0000000000000000 W SimpleDBStorage::~SimpleDBStorage()
0000000000000000 n SimpleDBStorage::~SimpleDBStorage()
0000000000000000 W GenericDBStorage::~GenericDBStorage()
0000000000000000 W GenericDBStorage::~GenericDBStorage()
0000000000000000 W GenericDBStorage::~GenericDBStorage()
0000000000000000 n GenericDBStorage::~GenericDBStorage()
0000000000000000 W Storage::SetSaveRequired()
0000000000000000 W Storage::Save(QString)
0000000000000000 W Storage::Storage()
0000000000000000 W Storage::Storage()
0000000000000000 n Storage::Storage()
0000000000000000 W Storage::~Storage()
0000000000000000 W Storage::~Storage()
0000000000000000 W Storage::~Storage()
0000000000000000 n Storage::~Storage()
0000000000000000 W DBStorage::DBStorage(StorageUser*, QString, QString)
0000000000000000 W DBStorage::DBStorage(StorageUser*, QString, QString)
0000000000000000 n DBStorage::DBStorage(StorageUser*, QString, QString)
0000000000000000 W DBStorage::~DBStorage()
0000000000000000 W DBStorage::~DBStorage()
0000000000000000 W DBStorage::~DBStorage()
0000000000000000 n DBStorage::~DBStorage()
00000000000018fe T HostDBStorage::GetSetClause(QMap<QString, QVariant>&) const
00000000000016ca T HostDBStorage::GetWhereClause(QMap<QString, QVariant>&) const
0000000000001e7e T GlobalDBStorage::GetSetClause(QMap<QString, QVariant>&) const
0000000000001d7c T GlobalDBStorage::GetWhereClause(QMap<QString, QVariant>&) const
0000000000000d76 T SimpleDBStorage::GetSetClause(QMap<QString, QVariant>&) const
0000000000000fa4 T SimpleDBStorage::IsSaveRequired() const
00000000000011cc T GenericDBStorage::GetSetClause(QMap<QString, QVariant>&) const
000000000000104c T GenericDBStorage::GetWhereClause(QMap<QString, QVariant>&) const
0000000000000000 W Storage::IsSaveRequired() const
0000000000000000 W DBStorage::GetTableName() const
0000000000000000 W DBStorage::GetColumnName() const
0000000000000000 V typeinfo for HostDBStorage
0000000000000000 V typeinfo for GlobalDBStorage
0000000000000000 V typeinfo for SimpleDBStorage
0000000000000000 V typeinfo for GenericDBStorage
0000000000000000 V typeinfo for Storage
0000000000000000 V typeinfo for DBStorage
0000000000000000 V typeinfo name for HostDBStorage
0000000000000000 V typeinfo name for GlobalDBStorage
0000000000000000 V typeinfo name for SimpleDBStorage
0000000000000000 V typeinfo name for GenericDBStorage
0000000000000000 V typeinfo name for Storage
0000000000000000 V typeinfo name for DBStorage
0000000000000000 V vtable for HostDBStorage
0000000000000000 V vtable for GlobalDBStorage
0000000000000000 V vtable for SimpleDBStorage
0000000000000000 V vtable for GenericDBStorage
0000000000000000 V vtable for Storage
0000000000000000 V vtable for DBStorage

Something wrong with the vtables here. I hate these kind of errors. They 
can be very hard to find.

Roger


More information about the mythtv-dev mailing list