前端之家收集整理的这篇文章主要介绍了
将标题中的“extern”C“’声明为C共享库的影响是什么?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
基于
this question,我理解了将C库与C
代码链接起来的构造的目的.现在假设如下:
我有一个用C编译器编译的’.so’共享库.标题有一个’typedef stuct’和许多函数声明.如果标题包含extern“C”声明……
#ifdef __cplusplus
extern "C"
{
#endif
// typedef struct ...;
// function decls
#ifdef __cplusplus
}
#endif
……有什么影响?具体来说,我想知道该声明是否有任何有害的副作用,因为共享库被编译为C,而不是C.
在这种情况下,有没有理由有外部“C”声明?
这很重要,因此编译器不会命名mangle. C使用
名称修改来区分具有运算符重载的
函数.
对二进制文件运行“/usr/bin/nm”以查看C对函数名称的作用:
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiEvT_S7_SaIT0_E
extern“C”阻止该名称变形.
IIRC,使程序可以在运行时动态链接符号.这对于“插件”类型的体系结构来说很常见.
原文链接:https://www.f2er.com/c/117731.html