与ld的奇怪警告

时间:2011-10-16 17:10:02

标签: c++ gcc warnings ld

我在ld收到了这个警告,当时我正在制定我的计划:

  

ld:警告:全局构造函数中的直接访问,键入_ZN12_GLOBAL__N_143ensure_log_is_created_before_maing_l_filterEto cs::ObjectFactoryAliasInstantiation<cs::DefaultCommandDispatcher>的全局弱符号vtable表示弱符号在运行时无法覆盖。这可能是由于使用不同的可见性设置编译了不同的翻译单元造成的。

代码女巫引用错误是这样的:

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;

1 个答案:

答案 0 :(得分:-2)

这可能是由于使用不同的可见性设置编译不同的翻译单元造成的。

即。您更改了一些标题,但没有对整个项目进行完整重新构建。现在就这样做。