Как заставить 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.