GCC通过注册-opt_pass未定义符号



我正试图在我的gcc插件代码中注册一个通行证。为此,我首先声明my_first_pass类,它派生自gimple_opt_pass,然后,这个类派生自opt_pass等等…

class my_first_pass : public gimple_opt_pass
{
public:
my_first_pass(gcc::context * ctx) :
gimple_opt_pass(my_first_pass_data, ctx)
{}
};

然后,我尝试实例化my_first_pass对象,如下面的代码所示,同时配置register_pass_info结构的其余字段。

struct register_pass_info pass_info;
pass_info.pass = new my_first_pass(g/*gcc related global variable*/);
...

为了编译上面的代码,我生成了一个共享库,然后由gcc加载。每当我运行gcc时,我都会收到以下错误,我知道这是由上面代码中创建my_first_pass对象引起的:

cc1plus: error: cannot load plugin ./plugin.so
./structsizes.so: undefined symbol: _ZTI8opt_pass

我下面是一个在线示例,但如果我运行$(GCC_SRC)/GCC/testsuite/GCC.dg/plugin/one_time_plugin.c,我会遇到完全相同的问题。

(使用从源代码编译的GCC 4.9.2)

提前感谢,干杯

编辑:在GCC 6.3.0上尝试过,我也遇到了同样的问题。

我发现了问题所在。

我只需要在编译插件时添加以下选项:-fno rtti

相关内容

  • 没有找到相关文章

最新更新