gpt4 book ai didi

programming-languages - 如何结合不同的编程语言

转载 作者:行者123 更新时间:2023-12-04 11:43:35 26 4
gpt4 key购买 nike

我是,不询问何时将链接到不同的编程语言。

这是一个相当普遍的问题,但是我个人正在使用Linux。

我想了解的是可以成为不同编程语言的过程
结合起来,我找到了一篇有关结合C/C++/Fortran的好文章:
http://www-h.eng.cam.ac.uk/help/tpl/languages/mixinglanguages.html

据我了解,大多数编译器执行两个阶段:

  • 将语言文件转换为包含机器代码但仍然存在的目标文件
    包含一些符号(可能是函数名称?)
  • 将目标文件链接在一起,仅在此阶段,链接程序才会检查功能
    对象文件中的对象是可调用的。

  • 我认为合并不同语言的问题是名称修饰
    在将功能名称转换为目标代码时会对其进行更改。

    问题是:
  • 您是否能以某种方式事先发现错误的函数名称,而不是在编程语言中明确指定它们,或更妙的是,是不是已经有一款软件能够做到这一点?
  • 我不完全了解动态库是如何链接的,但是可以使用不同的语言
    通过程序与动态库交互的相同方法进行交互?

  • p.s主要目的是调用用另一种语言编写的函数。

    最佳答案

    将不同的目标文件链接在一起的问题通常归结为子例程调用约定。基本上,当您调用另一个目标文件中的例程时,编译器将必须知道该另一个目标文件将在内部对其例程进行命名,如何传递其所有参数以及哪些(如果有)设置和清除代码该例程将需要。通常将所有这些东西归类到calling convention s的标题下。

    每个编译器都有自己喜欢用于子例程的调用约定。注意我说的是“编译器”,而不是语言。 Linux中的C调用约定与Windows中的C调用约定不同。

    因此,当您混合使用多种语言时,您需要某种方法来告诉编译器以供调用子例程或被调用子例程使用另一种语言的调用约定。 C的约定是一种流行的用法,可以用作“通用语言”,因为几乎每个平台都具有C编译器。但是,某些平台(例如Windows)具有多种流行的调用约定。

    现在我们问您在评论中提出的问题:

    Is there a common way to "tell the compiler to use the other language's calling convention"?



    答案是“不,不是真的”。某些语言确实定义了使用其他特定语言的调用约定的方式。例如,C++允许您在声明上放置 extern "C",以告知编译器所讨论的声明使用C调用约定。 Ada使用 pragma Convention (X,...)完成相同的操作,其中X是约定名称。 CFortranCobol由该语言定义,但是定义了其他受支持的内容(例如Windows的 Stdcall)。

    但是,如果您有一对编译器作者从未想到过的语言,那么您别无选择,只能告诉他们使用他们都知道的第三种约定(通常是C约定)。例如,要使标准C++和Ada互操作,您需要让服务器代码使用C约定导出其例程,并告诉客户端代码其正在调用的例程正在使用C约定。

    关于programming-languages - 如何结合不同的编程语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6767532/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com