in Arm, C++ compiler recognizes keyword: extern "C", and the Macro __cplusplus
In C header files, add __cplusplus to make sure the header files can be recognized by C++, as following
#ifdef __cplusplus // This statement is true in C++ but false in C
extern "C"
{
#endif
//Original Header File Contents
#ifdef __cplusplus
}
#endif
In C++,
If you'd like to include a C header file without changing the C header, you can do like:
extern "C"{
#include "CHeader.h"
}
If you'd like to export a function to C, you can do like:
extern "C" int OutputApi(int);
<NOTE>
A header file can only be compiled one time.
So it is needed to add a pure C type header file additionally to designate what C++ exported functions.
This C type header file is actually included in other C source files. (not in C++)
Following are the workable method to achieve the C/C++ cross compiler in ARM.
a.cpp
void aa(void){}
a.h
#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C
#endif
EXTERN_C void aa(void);
intermediate.h
include <a.h>
b.c
include <intermediate.h>
void call_c()
{
aa();
}
沒有留言:
張貼留言