0

我有一个动态库lib_funcs.so,用 C 编写。当我将它链接到 C 项目(通过 Code::Blocks)时,一切正常,但是当我将它链接到 C++ 项目并使用该库中的函数时,Code::Blocks 给出错误: undefined reference to 'functions name'.

4

2 回答 2

4

当您包含声明函数的标头时,将该包含包含在一个extern "C"块中。

extern "C" {
#include "funcs.h"
}

C++ 使用名称修饰来支持函数重载(其中它重命名函数以包含有关其参数类型的信息),而 C 只使用您为函数提供的名称。因此,您的 C++ 代码正在寻找名称混乱的函数,而不是它们的真实名称。如果你extern "C"在函数声明周围使用,那将导致 C++ 编译器使用 C 风格的命名约定,而不是 C++。

于 2013-06-18T22:25:37.597 回答
0

您需要定义原型extern "C" { prototypes }以防止名称混淆。

于 2013-06-18T22:24:58.310 回答