其他分享
首页 > 其他分享> > 如何从C调用C编写的lib?

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

作者:互联网

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

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

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

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

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

解决方法:

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

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

#ifdef __cplusplus
extern "C" {
#endif

void func(void);

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

#ifdef __cplusplus
}
#endif

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

UPDATE

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

标签:c-3,c,linker,static-linking
来源: https://codeday.me/bug/20191009/1875602.html