繁体   English   中英

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

[英]G++ 4.9 - function at module scope not being called?

我正在使用模块级函数调用向注册表类注册工厂函数:

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 )
{
}

其中,例如:: DEV :: DeviceRegistry :: RegisterControllerClass()是命名空间(例如DEV)中的自由函数。 这在Visual Studio下可以很好地工作,但是在GCC / Linux上运行时,代码似乎没有被调用-如果断点RegisterControllerClass(),则不会调用该代码。 以防万一编译器正在优化s_id字段,我用它来构造基类。 所以我确定不是那样。 此代码有什么问题?

链接器试图变得太聪明,并且删除了它认为没有被调用但会被间接调用的代码。

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

-Wl,-完整档案库-Wl,-不完整档案库...

解决了问题。 Yu

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM