c++ - 使用其他文件构建 gcc 插件

标签 c++ gcc g++ gcc-plugins

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

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

    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

错误是什么意思?特别是 符号:_ZTV5field ?

最佳答案

_ZTV5field1field 的虚函数表,c++filt 可以告诉你:

$ echo _ZTV5field | c++filt 
vtable for field

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

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

关于c++ - 使用其他文件构建 gcc 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29561410/

相关文章:

c++ - 哪些虚拟指针值是可以的

C - 宏观矛盾

c++ - 模板化函数应该通过值还是通过右值引用来获取 lambda 参数?

gcc - c 库中的 Valgrind 错误?

linux - 如何在编译/链接时让 gcc 达到每个内核不超过 50% 的占用率?

c++ - C++ 中的继承和模板 : Why doesn't the following piece of code compile?

ubuntu - arm交叉编译时如何处理Boost之类的库?

c++ - 这是针对大学 100 级软件类(class)期中考试的合理笔试吗?

c++ - 将哈希函数定义为结构的一部分

c++ - 变量周围的 VS 报告堆栈已损坏