如何从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