gcc - 开始使用 GCC 插件

标签 gcc undefined symbols gcc-plugins

所以在网上搜索了一段时间后,我决定尝试这里,因为它似乎是一个很好的讨论论坛。我正在尝试创建一个简单的 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/

相关文章:

linux - 每个任务使用一个 cpu 核心

java - 哈希表 "method put() is undefined for the type HashMap"

javascript - node.js "undefined"神秘出现

unicode - 创建 apl 语言栏的文本副本

.net - 'dotnet nuget push .. .' doesn' t 似乎在插入符号

linux - 从构建命令中排除动态依赖项?

linux - 编辑 CMakeLists.txt 以使用 -fPIC 进行编译

javascript - Jasmine 单元测试 - 测试对象的未定义属性

android - 在Google Play应用程序中用特殊字符搜索

c - gcc 内在与内联汇编 : which is better?