您可能不需要了解很多关于 gcc 插件的知识就可以理解这个问题
你好,我正在尝试创建一个 gcc 插件,它使用其他文件作为 classTree.cpp
和 field.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
?
最佳答案
_ZTV5field
是 1 类 field
的虚函数表,c++filt
可以告诉你:
$ echo _ZTV5field | c++filt
vtable for field
这个符号是未定义的意味着编译器无法生成这个表,这很可能意味着类 field
有一个你忘记实现的虚拟成员函数。
1 在 Itanium ABI自 3.2 版以来,gcc 一直在非 Windows 平台上使用。
关于c++ - 使用其他文件构建 gcc 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29561410/