使用其他文件构建 gcc 插件
Build gcc plugin using other files
你可能不需要对 gcc 插件了解很多就可以理解这个问题
你好,我正在尝试创建一个 gcc 插件,它使用其他文件作为 classTree.cpp
和 field.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
?
_ZTV5field
是 1 class field
的虚函数 table,c++filt
可以看出你:
$ echo _ZTV5field | c++filt
vtable for field
这个符号未定义意味着编译器无法生成这个 table,这很可能意味着 class field
有一个你忘记的虚成员函数实施。
1 在 Itanium ABI 中,gcc 自版本 3.2 以来一直在非 Windows 平台上使用。
你可能不需要对 gcc 插件了解很多就可以理解这个问题
你好,我正在尝试创建一个 gcc 插件,它使用其他文件作为 classTree.cpp
和 field.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
?
_ZTV5field
是 1 class field
的虚函数 table,c++filt
可以看出你:
$ echo _ZTV5field | c++filt
vtable for field
这个符号未定义意味着编译器无法生成这个 table,这很可能意味着 class field
有一个你忘记的虚成员函数实施。
1 在 Itanium ABI 中,gcc 自版本 3.2 以来一直在非 Windows 平台上使用。