Undefined Reference to a function

六眼飞鱼酱① 提交于 2019-11-29 07:57:12

If you're really compiling fileA.c as C, not C++, then you need to make sure that the function has the proper, C-compatible linkage.

You can do this with a special case of the extern keyword. Both at declaration and definition:

extern "C" void F1();
extern "C" void F1() {}

Otherwise the C linker will be looking for a function that only really exists with some mangled C++ name, and an unsupported calling convention. :)

Unfortunately, whilst this is what you have to do in C++, the syntax isn't valid in C. You must make the extern visible only to the C++ code.

So, with some preprocessor magic:

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

Not entirely pretty, but it's the price you pay for sharing a header between code of two languages.

To be able to call a c++ function from c source code you neeed to give the appropriate linkage specification.

The format for specifying linkage specification is

extern "type_of_Linkage" <function_name>

So in your case, you should be using:

extern "C" void F1();

perhaps, use

extern "C" void F1();

fileA.c can't include fileB.h (via fileA.h) because the C compiler doesn't know what extern "C" means, so it complains that it sees an identifier before a string. don't try to include fileB.h in fileA.c or fileA.h. its not needed

fileA.c needs to also include fileA.h I believe.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!