我正在尝试在我的 gcc 插件代码中注册一个通行证。为此,我首先声明派生自 gimple_opt_pass 的 my_first_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 上试过,我也有同样的问题。