0

我正在尝试编译一些代码,这些代码使用在名为 staticlib.a 的静态库中实现的函数。我还有名为 staticlib.h 的头文件,其中包含该函数的声明。我的 main,包含在 main.c 文件中,其中包括 staticlib.h,只调用该函数而不调用其他函数。所以我用 gcc main.c staticlib.a 编译,一切正常。我需要 c++ 的一些特性,但如果我在 main.cpp 中正确更改 main.c 并以相同的方式编译 gcc main.cpp staticlib.a,则会发生对我的函数的未定义引用。我怎样才能使它起作用?为什么会出现这个问题?在我访问过的任何网站中,我都找不到真正的解释……谢谢您的所有回答。

4

2 回答 2

1

您必须将库中的函数定义为“C”函数,而不是 C++ 函数 - 在 main.cpp 中执行此操作

extern "C"
{
#include "staticlib.h"
}
于 2012-10-18T14:49:05.560 回答
1

C 和 C++ 编译不同,C++ 使用名称修饰(在目标文件中嵌入 C++ 类型信息)。要停止此行为以便您可以从 C++ 链接到 C 代码,您可以在包含 C 头文件时在 C++ 中使用 extern C 语法。

请看这里 http://www.cplusplus.com/forum/general/1143/

于 2012-10-18T14:50:26.707 回答