明明头文件已经包含,却还报错“undefined reference to xxx”,除了库没有正确链接外,还有可能是编译器的关系
问题:
在编译可执行文件时,需要链接一个静态库.a文件,在反复确认makefile已经添加正确,头文件也已经包含,却还是报错。后来发现这个.a文件使用的*.o是使用gcc编译的,而编译时可执行文件使用g++。
以下称.a文件所用工程为工程A,可执行文件所用工程为工程B。
尝试解决1:
改变工程A的编译工具,用g++编译*.o,由于c和c++的语法差异,编译失败
尝试解决2:
在工程B的代码中,跟工程A相关的调用,使用extern "C" 修饰
假设,工程A里有函数int test(),有头文件test.h,在工程B里要调用这个test(),那么在工程B中头文件按如下包含,test()就可以正常调用了
extern "C"
{
#include "test.h"
}