如何强制g ++创建C符号名称
问题描述:
我在cpp文件中有一个名为init的函数,但是当我编译它时,g ++在目标文件中创建了一个名为_Z4initv的符号,所以当我用ld选项后-e init,显然ld不能识别符号init。有没有办法用C++创建C风格的符号名称?如何强制g ++创建C符号名称
答
如果你有一个像例如
void init() { ... /* some code */ ... }
然后抑制name mangling需要将其申报为extern "C"
:
extern "C" void init() { ... /* some code */ ... }
如果你在一个头文件中的声明,你想在你需要一个C源文件,包括使用__cplusplus
宏来检查是否将头文件包含在C或C++源文件中:
#ifdef __cplusplus
extern "C"
#endif
void init(void);
请注意,头文件中的函数必须在参数列表中用void
声明,如果它没有任何参数。这是因为声明void init()
意味着意味着其他在C.
曾经见过'extern“C”'之前的某处?从来不知道它做了什么? –
我在我的文件开头写了#if define(__ cplusplus)extern“C”#endif – Adrien