У меня есть плагины C ++:
class PluginBase
{
public:
virtual void foo () = 0;
virtual void bar () = 0;
};
extern "C" PluginBase * new_instance ();
Это реализовано как общая библиотека
class PluginImplementation : public PluginBase
{
void foo () override;
void bar () override;
}
void PluginImplementation::foo () {}
// void PluginImplementation::bar () {} // NOTE: MISSING
extern "C" PluginBase * new_instance ()
{
return new PluginImplementation ();
}
Это построено с CMake
с использованием gcc
:
ADD_LIBRARY (plugin_implementation SHARED PluginImplementation.cpp)
Эта сборка libplugin_implementation.so
, хотя PluginImplementation::bar
не реализована.
Я получаю, что пропущенный символ может быть определен в другом месте программы во время выполнения, поэтому компоновщик разрешает его пропустить издинамическая библиотека.
Я не хочу этого.
Есть ли способ заставить сборку .so
завершиться неудачно, если не определены все члены class ?