2

我在弄清楚如何做下一件事时遇到了问题。

我有以下代码:

测试.cpp

#include <stdio.h>

void
function(void) {printf("Hellow ");}

int main(void) {
    printf("World\n");
    return 0;
}

我想把它变成下一个:

#include <stdio.h>

void
function(void) {printf("Hellow ");}

int main(void) {
    function();
    printf("World\n");
    return 0;
}

带有 gcc 插件。

在我的插件中不起作用的代码是这个:

...
tree function_fn;
tree function_fn_type;

function_fn_type=build_function_type_list(void_type_node, void_type_node, NULL_TREE);
function_fn = build_fn_decl ("function", function_fn_type);

gimple call = gimple_build_call (funcion_fn, 0);
gsi_insert_before (&gsi, call, GSI_NEW_STMT);
...

然后,当我使用插件编译 test.cpp 时,出现下一条错误消息:

/tmp/cc2VRszt.o: 在函数main': test.cpp:(.text+0x60): Undefined reference to函数中'

任何人都可以帮助我吗?

4

1 回答 1

1

您正在构建函数声明,并根据声明插入对函数的调用,但除非您在链接到的另一个翻译单元中定义了该函数,否则它将无法解析。如果您希望插件在示例中的相同翻译单元中插入定义,那么前端开发人员指南将是一个好的开始:

http://www.tldp.org/HOWTO/GCC-Frontend-HOWTO-7.html

于 2014-09-25T01:18:07.360 回答