如何从C调用用C++编写的lib?

lIm*_*bus 2 c c++ linker static-linking

在我看来,这似乎是一个明智的选择,但我无法找到任何反对或为此的信息.

从demangling等的角度来看,我不认为这是一个大问题,但我无法弄清楚,我怎么能写一个小C程序从一个小小的C++库调用一个函数.

我现在在linux上,尝试使用静态绑定.

这肯定是许多人遇到的事情或许多书籍所涵盖的事情,但我觉得这是一个坐在这个问题面前的盲人.有趣的是,在SO上也没有这样的问题.

我甚至不知道如果这可以工作,那么必须如何做得更少.

Oli*_*rth 8

通常,您需要强制C++编译器为导出的函数构建具有C链接的库.

您可以通过对标题执行以下操作来执行此操作:

#ifdef __cplusplus
extern "C" {
#endif

void func(void);

/* ... Other function defs go here ... */

#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)

通常,链接器将对函数执行C++名称修改,以便C链接器无法找到它们. extern "C"强迫它不要这样做.你需要将它包装在中#ifdef,因为extern "C"在C中无效.

UPDATE

正如Charles Salvia在下面的评论中所说,你需要确保没有异常通过你的界面出来,因为C无法处理它们(至少不是与平台无关的方式).