我有一个用C编写的动态库lib_funcs.so
。当我将它链接到一个C项目(通过Code :: Blocks)时,一切都很好,但是当我将它链接到一个C ++项目并使用来自的函数时这个库Code :: Blocks给出错误:undefined reference to 'functions name'
。
答案 0 :(得分:4)
当您包含声明函数的标头时,将该包含包装在extern "C"
块中。
extern "C" {
#include "funcs.h"
}
C ++使用名称修改来支持函数重载(其中它重命名函数以包含有关其参数类型的信息),而C只使用您为函数提供的名称。因此,您的C ++代码正在查找其错位名称下的函数,而不是它们的真实名称。如果在函数声明周围使用extern "C"
,那么将导致C ++编译器使用C样式命名约定,而不是C ++。
答案 1 :(得分:0)
您需要将原型定义为extern "C" { prototypes }
以防止名称损坏。