G ++ 4.9 - 模块范围内的函数未被调用?

时间:2016-08-01 13:40:17

标签: c++ linux gcc

我正在使用模块级函数调用来注册具有注册表类的工厂函数:

static Controller * ctor( Device * device, const char * ) { return new NullController(device); }
static int s_id = DeviceRegistry::RegisterControllerClass( "null", ctor );

//------------------------------------------------------------------------------

NullController::NullController( Device * device )
: Controller( device, "null", s_id )
{
}

其中eg :: DEV :: DeviceRegistry :: RegisterControllerClass()是命名空间中的自由函数,例如DEV。这在Visual Studio下运行良好,但在GCC / Linux上运行时似乎没有调用代码 - 如果我断开RegisterControllerClass(),它就不会被调用。为了防止编译器优化s_id字段,我用它来构造基类。所以我确定不是那样的。这段代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

链接器试图过于聪明并删除它认为未调用的代码,但会间接调用。

在库周围的Netbeans链接器选项对话框中添加命令行选项

-Wl, - 全归档   LIB   轮候册, - 无全存档   ...

解决了这个问题。育。