在c ++项目中使用C * .so库(Ubuntu)在c项目中使用C * .so库(ubuntu)

时间:2013-06-18 22:23:22

标签: c++ c

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

您需要将原型定义为extern "C" { prototypes }以防止名称损坏。