lIm*_*bus 2 c c++ linker static-linking
在我看来,这似乎是一个明智的选择,但我无法找到任何反对或为此的信息.
从demangling等的角度来看,我不认为这是一个大问题,但我无法弄清楚,我怎么能写一个小C程序从一个小小的C++库调用一个函数.
我现在在linux上,尝试使用静态绑定.
这肯定是许多人遇到的事情或许多书籍所涵盖的事情,但我觉得这是一个坐在这个问题面前的盲人.有趣的是,在SO上也没有这样的问题.
我甚至不知道如果这可以工作,那么必须如何做得更少.
通常,您需要强制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无法处理它们(至少不是与平台无关的方式).