У меня проблемы с выяснением, как сделать следующее.
У меня есть следующий код:
test.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
Кто-нибудь может мне помочь?
Вы создаете объявление функции и вставляете вызов функции на основе объявления, но если вы не определили эту функцию в другом модуле перевода, на который вы ссылаетесь, она не будет решена. Если вы хотите, чтобы плагин вставлял определение в том же модуле перевода, что и в вашем примере, это руководство для внешних разработчиков было бы хорошим началом: