所以在网上搜索了一段时间后,我决定尝试这里,因为它似乎是一个很好的讨论论坛。我正在尝试创建一个简单的 gcc 插件。程序代码附在本邮件的末尾,但它以简单的英语注册插件并确保在注册 pragma 时调用 pragma_init 函数。正是在这里,我使用 c_register_pragma 来拦截一些 pragma。
我使用 http://gcc.gnu.org/onlinedocs/gccint/Plugins-building.html#Plugins-building 中的示例编译它.编译和链接工作正常。但是,当我加载插件时,我得到:
gcc -c -fplugin=plugin.so test.c -o test.o
cc1: error: cannot load plugin plugin.so
plugin.so: undefined symbol: warning
我究竟做错了什么?此外,当包含一些头文件(稍后需要)时,我会收到很多错误。例如,包括“tree.h”产量(在其他 50 个错误中):
/machmode.h:262:1: error: unknown type name 'class'
class bit_field_mode_iterator
^
/machmode.h:263:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
{
^
/plugin/include/tree.h:27:0,
from conftest.c:63:
/vec.h:220:8: error: field 'register_overhead' declared as a function
任何人都知道我做错了什么?
谢谢
最佳答案
这里有两个问题:
错误:“无法加载插件 plugin.so”意味着您应该将存储新共享库插件的目录添加到 LD_LIBRARY_PATH 中。
如果你用 g++ 而不是 gcc 编译,你在包含的所有文件中遇到的数百个错误都会在我的电脑中解决(不确定为什么这么想)
关于gcc - 开始使用 GCC 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15948386/