gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:04 25 4
gpt4 key购买 nike

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

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 字段,我用它来构造基类。所以我确定不是那样的。这段代码有什么问题?

最佳答案

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

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

-Wl,--整个存档 库 -Wl,--no-whole-archive ...

解决问题。呵呵。

关于c++ - G++ 4.9 - 模块范围内的函数没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38700410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com