加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在可以链接到c的语言上

发布时间:2020-12-16 10:44:50 所属栏目:百科 来源:网络整理
导读:正如我在这个主题上的反思一样,在我看来,如果用C语言实现一种语言,它很可能有一种链接到C的机制.我记得,Java是通过JNI的方式,虽然我不记得它是通过C还是普通C. 但是,似乎一般语言不链接到C,并且由于各种原因只能通过C访问C. 因此,出于好奇, 哪些语言可以链接
正如我在这个主题上的反思一样,在我看来,如果用C语言实现一种语言,它很可能有一种链接到C的机制.我记得,Java是通过JNI的方式,虽然我不记得它是通过C还是普通C.

但是,似乎一般语言不链接到C,并且由于各种原因只能通过C访问C.

因此,出于好奇,

哪些语言可以链接到C以及如何以及在何种程度上链接?

(除非以优雅或有趣的方式完成,例如Boost.Python,否则上述C桥没有功劳)

解决方法

注意:ABI包括名称修改以及调用约定,环境要求等.EABI(此处未涉及)是特定于平台的,但通常针对每个平台进行标准化(虽然这不能保证)并且不会受到影响可变EABI的问题(因为它没有太大变化).有关此主题的更多信息,请咨询 ABI on Wikipedia.

由于ABI未定义,因此不太可能链接到C.因此,符号的名称可以根据编译器供应商的意愿而改变.例如,GCC与MS的编译器不同.即使使用相同的编译器,ABI在版本之间也可能不同(与某些GCC版本的情况一样).

但是,链接到C并非不可能. C程序链接到其他C程序是很常见的,因为它们都是由相同的编译器(或至少使用相同ABI的编译器)编译的.如果ABI已知,则非C应用程序可以链接到C语言.

链接到C很容易.这是因为对于大多数平台而言,C的ABI比C的ABI更稳定.这是因为与C相比,C的简单性.因为C可以导出C符号,绕过C的ABI问题,所以有时会看到C库导出C符号,这些符号允许与底层C对象进行交互,而不会出现名称错位,链接兼容性和面向未来的问题.但是,这样做可以防止您通过C接口与C接口轻松使用C库.

但是您可以使用C导出来使用C接口.该库可以在头文件中提供一些类,为您包装C导出.这是对图书馆作者的更多工作(并且可能会导致一些问题,因为DRY通常不会使用这种技术),但为图书馆用户提供了很多好处(可以在两个界面之间进行选择而不必担心链接问题!).对于其他语言,库编写者可以提供类似C头文件的接口,这些文件处理C导出本身. (然后,您可以使用本机类等.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读