将标题中的“extern”C“’声明为C共享库的影响是什么?

将标题中的“extern”C“’声明为C共享库的影响是什么?,第1张

概述基于 this question,我理解了将C库与C代码链接起来的构造的目的.现在假设如下: 我有一个用C编译器编译的’.so’共享库.标题有一个’typedef stuct’和许多函数声明.如果标题包含extern“C”声明…… #ifdef __cplusplusextern "C"{#endif // typedef struct ...; // function decls 基于 this question,我理解了将C库与C代码链接起来的构造的目的.现在假设如下:

我有一个用C编译器编译的’.so’共享库.标题有一个’typedef stuct’和许多函数声明.如果标题包含extern“C”声明……

#ifdef __cplusplusextern "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,使程序可以在运行时动态链接符号.这对于“插件”类型的体系结构来说很常见.

总结

以上是内存溢出为你收集整理的将标题中的“extern”C“’声明为C共享库的影响是什么?全部内容,希望文章能够帮你解决将标题中的“extern”C“’声明为C共享库的影响是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1238121.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存