使用其他文件构建 gcc 插件

Build gcc plugin using other files

本文关键字:gcc 插件 构建 文件 其他      更新时间:2023-10-16

你可能不需要了解很多关于gcc插件的知识来理解这个问题

嗨,我

正在尝试创建一个使用其他文件作为classTree.cppfield.cpp的 gcc 插件,当我引用其他类时,我在构建插件时从未遇到过问题:顺便说一下,我正在使用这个命令:

    g++ -shared -I`g++ -print-file-name=plugin`/include 
           -I`g++ -print-file-name=plugin`/include/c-family -fPIC -fno-rtti -O2  
            order_checker.cpp -o plugin.so

并将其与此一起使用:

g++  -fplugin=./plugin.so tinytest.cpp -o toto

所有这些都如 gcc 插件 Doc 所示,他们还说当我使用其他文件时,我只需要像这样添加我的文件名:

    g++ -shared -I`g++ -print-file-name=plugin`/include 
        -I`g++ -print-file-name=plugin`/include/c-family -fPIC -fno-rtti -O2        
         order_checker.cpp classTree.cpp field.cpp -o plugin.so

当我使用它时,plugin.so被创建,但是当我尝试像以前一样运行它时,我收到此错误:

cc1plus: error: cannot load plugin ./plugin.so
./plugin.so: undefined symbol: _ZTV5field

错误是什么意思?尤其是symbol: _ZTV5field

_ZTV5field 是类 field虚函数表,c++filt可以告诉你:

$ echo _ZTV5field | c++filt 
vtable for field

此符号未定义意味着编译器无法生成此表,这很可能意味着类 field 具有您忘记实现的虚拟成员函数。

1 在 Itanium ABI 中,gcc 自 3.2 版以来一直在非 Windows 平台上使用。