在可以链接到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导出本身. (然后,您可以使用本机类等.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |