2017-03-10 41 views
0

我在cpp文件中有一个名为init的函数,但是当我编译它时,g ++在目标文件中创建了一个名为_Z4initv的符号,所以当我用ld选项后-e init,显然ld不能识别符号init。有没有办法用C++创建C风格的符号名称?如何强制g ++创建C符号名称

+0

曾经见过'extern“C”'之前的某处?从来不知道它做了什么? –

+0

我在我的文件开头写了#if define(__ cplusplus)extern“C”#endif – Adrien

回答

0

如果你有一个像例如

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.

相关问题