我正在尝试编译一些使用名为staticlib.a的静态库中实现的函数的代码。我还有名为staticlib.h的头文件,其中包含该函数的声明。我的main,包含在main.cib文件中,包含staticlib.h,只调用该函数而不是其他函数。所以我编译 gcc main.c staticlib.a 一切正常我需要一些c ++的功能,但如果我在main.cpp中正确更改main.c并以相同的方式编译 gcc main.cpp staticlib.a 发生了对我的功能的未定义引用。我怎样才能使这个工作?为什么会出现这个问题?我无法在我访问的任何网站上找到解释... 谢谢你的所有答案。
答案 0 :(得分:1)
你必须将库中的函数定义为'C'函数,而不是C ++函数 - 在main.cpp中执行此操作
extern "C"
{
#include "staticlib.h"
}
答案 1 :(得分:1)
C和C ++编译方式不同,C ++使用名称修改(在目标文件中嵌入C ++类型信息)。要停止此行为以便可以从C ++链接到C代码,可以在包含C头文件时在C ++中使用extern C语法。