gcc 插件实践 一
重要内容参考自 https://zhuanlan.zhihu.com/p/49490338
在ubuntu中直接实践以下代码,通常会遇见以下几种错误。
/* ------ plugin1.c ------ */
#include "gcc-plugin.h"
#include "plugin-version.h"
int plugin_is_GPL_compatible;
int plugin_init(struct plugin_name_args *plugin_info, struct plugin_gcc_version *version)
{
if (!plugin_default_version_check(version, &gcc_version))
{
printf("incompatible gcc/plugin versions\n");
return 1;
}
printf("Hello world!\n");
return 0;
}
/* ------ plugin1_test.c ------ */
#include <stdio.h>
int main()
{
/* Whatever you like. */
return 0;
}
终端执行
g++ -I`g++ -print-file-name=plugin`/include -std=c++11 -Wall -fno-rtti -Wno-literal-suffix -fPIC -c -o plugin1.o plugin1.c
g++ -std=c++11 -dynamiclib -undefined dynamic_lookup -o plugin1.so plugin1.o
gcc -fplugin=./plugin1.so plugin1_test.c -o plugin1_test.o
几种常见的错误
显示
gcc 找不到 gcc-plugin.h文件
g++ -std=c++11 -dynamiclib -undefined dynamic_lookup -o plugin1.so plugin1.o
g++: error: dynamic_lookup: 没有那个文件或目录
整套解决方案
sudo apt-get install gcc-7-plugin-dev (用gcc --version看一下自己的版本确定gcc-number-plugin-dev)
g++ -I`g++ -print-file-name=plugin`/include -std=c++11 -Wall -fno-rtti -Wno-literal-suffix -fPIC -c -o plugin1.o plugin1.c
g++ -std=c++11 -fPIC -shared -o plugin1.so plugin1.o (按照普通生成共享库的操作执行)