使用其他文件构建 gcc 插件

Build gcc plugin using other files

你可能不需要对 gcc 插件了解很多就可以理解这个问题

你好,我正在尝试创建一个 gcc 插件,它使用其他文件作为 classTree.cppfield.cpp,当我没有引用其他 [=33] 时,我在构建插件时从未遇到过问题=] : 顺便说一句,我正在使用这个命令:

    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 plugins 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 ?

_ZTV5field1 class field 的虚函数 table,c++filt 可以看出你:

$ echo _ZTV5field | c++filt 
vtable for field

这个符号未定义意味着编译器无法生成这个 table,这很可能意味着 class field 有一个你忘记的虚成员函数实施。

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