Я получил это предупреждение от ld
, когда я создавал свою программу:
ld: warning: прямой доступ в глобальных конструкторах с ключом _ZN12_GLOBAL__N_143ensure_log_is_created_before_maing_l_filterEto
глобальный слабый символ vtable для cs::ObjectFactoryAliasInstantiation<cs::DefaultCommandDispatcher>
означаетслабый символ не может быть переопределен во время выполнения.Вероятно, это было вызвано тем, что различные блоки перевода были скомпилированы с разными настройками видимости.
Код, ссылающийся на ошибку, выглядит так:
class ObjectFactory {
public :
ObjectFactory(const char *alias):sAlias(alias){};
std::string sAlias;
virtual void* createInstance() = 0;
};
template <class T>
class ObjectFactoryAliasInstantiation : public ObjectFactory{
public:
ObjectFactoryAliasInstantiation(const char *alias):ObjectFactory(alias){};
void* createInstance() { return (void*)new T(&sAlias); };
};`
и это:
/*
Class for register the dispatcher for the command
*/
class CommandDispatcherRegister {
public:
CommandDispatcherRegister(ObjectFactory *commandFactory);
};
/*
Macro for help the Command Dispatcher classes registration
*/
#define REGISTER_AND_DEFINE_COMMAND_DISPATCHER_CLASS(CMD_CLASS_NAME) class CMD_CLASS_NAME;\
static const CommandDispatcherRegister CMD_CLASS_NAME ## CommandDispatcherRegister(new ObjectFactoryAliasInstantiation<CMD_CLASS_NAME>(#CMD_CLASS_NAME));\
class CMD_CLASS_NAME : public CommandDispatcher\
конец это:
REGISTER_AND_DEFINE_COMMAND_DISPATCHER_CLASS(DefaultCommandDispatcher) {
bool deinitialized;