GCC插件编译问题

GCC插件编译问题,gcc,cross-compiling,gcc-plugins,Gcc,Cross Compiling,Gcc Plugins,我正在尝试交叉编译一个自定义内核模块(), 这取决于最初在git中编译的插件(位于$git/buildtools/gcc-nexmon-plugin/nexmon.c中) 最初,这个树打算直接构建在raspberry pi上,但我想将此功能移植到buildroot系统,也就是说,我的raspberry pi上没有gcc/g++,我只在笔记本电脑上进行交叉编译 我的问题是如何正确创建nexmon.so(插件文件),以便以后在交叉编译时使用它 生成nexmon.so的原始命令行是: g++ -std

我正在尝试交叉编译一个自定义内核模块(), 这取决于最初在git中编译的插件(位于$git/buildtools/gcc-nexmon-plugin/nexmon.c中)

最初,这个树打算直接构建在raspberry pi上,但我想将此功能移植到buildroot系统,也就是说,我的raspberry pi上没有gcc/g++,我只在笔记本电脑上进行交叉编译

我的问题是如何正确创建nexmon.so(插件文件),以便以后在交叉编译时使用它

生成nexmon.so的原始命令行是:

g++ -std=c++11 -Wall -fno-rtti -fPIC -I../gcc-arm-noneabi[...]/plugin/include \
     -c -o nexmon.o nexmon.c

g++ -shared -o nexmon.so nexmon.o
如您所见,它们在树中包含了一些交叉编译器(“../gcc arm..”)

现在我明白了插件不应该被交叉编译。记住,他们希望我们在raspberry pi上运行这个,所以“g++”是嵌入的“g++”。在我这方面,我必须运行笔记本电脑的“g++”

不幸的是,我似乎无法让它在我的笔记本电脑上工作,以下是我现在正在尝试的:

g++ -std=c++11 -Wall -fno-rtti -fPIC -I/usr/include \
   -I/usr/lib/gcc/x86_64-linux-gnu/8/plugin/include -o nexmon.o -c nexmon.c
因为我目前使用的是g++8.3.0-6,我找到了相应的插件开发标题。如果我运行这个,我会遇到很多问题

  • “在包含的plugin/include/tree.h文件中:#错误未知位每_单位”
  • “在包含的plugin/include/cpplib.h文件中:#error找不到至少32位有符号整数类型”
这让我觉得我缺少了一些标志来正确定义我的笔记本电脑架构,但我可能错了

以下是我的错误的完整粘贴箱:

我想我确实有东西可以构建一个插件,因为gcc8/plugin/include是存在的。我尝试安装“gcc-multilib,gcc-8-plugin-dev-i686-linux-gnu,gcc-8-plugin-dev-x86-64-linux-gnux32,gcc-8-plugin-dev”。我不能回到以前的gcc(如4.8、5、6、7),因为我所有的debian升级都删除了它们,它们不再被使用


任何帮助都将不胜感激,到目前为止还没有人能够帮助我,我的想法也没有了。这一点完全阻碍了我的项目。

我在回答我自己的问题,因为这可能会在未来帮助人们

首先,我在如何编译插件以供以后在交叉编译上下文中使用时出错,正确的方法是:

$(HOST_CXX) -fPIC -I$(TARGET_CC)/[..]/plugin/include -shared \
     -o plugin.so plugin.c
因此,您不是交叉编译,而是调用交叉编译器的插件开发环境。要找到正确的包含路径,只需执行以下操作:

$(TARGET_CXX) -print-file=plugin
我的编译问题是因为这个插件是为较旧的gcc版本(5+)构建的,而我正在使用(8+)。我的修复方法是替换以下行:

#include <plugin.h> 
#包括
(我想,这是调用插件开发环境的老方法),方法是:

#包括
#include <gcc-plugin.h>