转载自http://beyondmeteor.blog.163.com/blog/static/365436302012013112439818/
当编译C/C++混用的项目时,可能会遇到这个问题。
1.某个头文件中extern “C”的使用存在问题,如果包含这个有问题的头文件之后,又包含<map>,<vector>等就会出现这个问题。
1). 需要检查extern "C"后面为一个函数
extern "C" int get_value(void);
2). extern "C" { }的定义是否完整。
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
2. 不要在extern "C"的中引用C++ STL库的头文件,如<map>, <vector>等具有template的头文件。
extern "language_name" declaration ;
extern "language_name" { declaration ; declaration ; ... }
extern "C" {
void f(); // C linkage
extern "C++" {
void g(); // C++ linkage
extern "C" void h(); // C linkage
void g2(); // C++ linkage
}
extern "C++" void k();// C++ linkage
void m(); // C linkage
}