Как заставить g++ создать имя символа C

У меня есть функция с именем init в файле cpp, но когда я ее компилирую, g++ создает в объектном файле символ с именем _Z4initv, поэтому, когда я связываю после с помощью ld опцию -e init, очевидно, что ld не распознает символ в этом. Есть ли способ создать имя символа в стиле C с g++?

1 ответ

Если у вас есть определение, например, например

void init() { ... /* some code */ ... }

Затем, чтобы запретить искажение имени, нужно объявить его как extern "C":

extern "C" void init() { ... /* some code */ ... }

Если у вас есть объявление в заголовочном файле, которое вы хотите включить в исходный файл C, вам нужно проверить, включаете ли вы заголовочный файл в исходный файл C или C++, используя __cplusplus макрос:

#ifdef __cplusplus
extern "C"
#endif
void init(void);

Обратите внимание, что функция в заголовочном файле должна быть объявлена ​​с void в списке аргументов, если он не принимает никаких аргументов. Это потому, что декларация void init() означает что-то еще на C.

Другие вопросы по тегам