Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编程语言中C API的包装器_Python_C_Cross Language - Fatal编程技术网

Python 编程语言中C API的包装器

Python 编程语言中C API的包装器,python,c,cross-language,Python,C,Cross Language,我在一些编程语言中遇到了一个特性,可以在其他编程语言中调用方法。它被称为外部功能接口。例如,我可以在Python程序中调用C语言函数。或者我可以用Python语言为一些C库编写一个包装器,供其他Python用户使用 一个简单的例子是Python中的ctypes。因此,使用这个,我可以访问libc中的time函数。我理解到这个程度。然而,我无法清楚地了解这个ctypes本身是如何实现的以及其他“幕后”的事情 我在这里遇到的问题是: 这种语言的编译器需要什么样的功能才能使用外部函数接口。因为它也应该

我在一些编程语言中遇到了一个特性,可以在其他编程语言中调用方法。它被称为
外部功能接口
。例如,我可以在Python程序中调用C语言函数。或者我可以用Python语言为一些C库编写一个包装器,供其他Python用户使用

一个简单的例子是Python中的
ctypes
。因此,使用这个,我可以访问libc中的
time
函数。我理解到这个程度。然而,我无法清楚地了解这个ctypes本身是如何实现的以及其他“幕后”的事情

我在这里遇到的问题是:

  • 这种语言的编译器需要什么样的功能才能使用外部函数接口。因为它也应该编译外语
  • 因此,如果宿主语言是面向对象的,而外语不是,那么我需要某种对象之间的映射。这是怎么处理的
  • 如果主机语言在虚拟机上运行该怎么办?在这种情况下,指令集会有所不同,对吗
  • 因为它也应该编译外语

    不需要。ctypes等只需要能够链接到目标代码。这取决于目标外语在目标代码中具有适当的名称损坏约定,而C就是这样做的

    如果宿主语言是面向对象的,而外语不是,那么我需要某种对象之间的映射。这是怎么处理的

    C代码需要为宿主语言公开适当的接口;或者等效地,使用一些C语言库来实现。CPython是用C编写的,所以在这种情况下,广义上说这很容易

    如果主机语言在虚拟机上运行该怎么办?在这种情况下,指令集会有所不同,对吗

    VM必须有适当的工具来加载编译的目标代码

    因为它也应该编译外语

    不需要。ctypes等只需要能够链接到目标代码。这取决于目标外语在目标代码中具有适当的名称损坏约定,而C就是这样做的

    如果宿主语言是面向对象的,而外语不是,那么我需要某种对象之间的映射。这是怎么处理的

    C代码需要为宿主语言公开适当的接口;或者等效地,使用一些C语言库来实现。CPython是用C编写的,所以在这种情况下,广义上说这很容易

    如果主机语言在虚拟机上运行该怎么办?在这种情况下,指令集会有所不同,对吗

    VM必须有适当的工具来加载编译的目标代码

    因为它也应该编译外语

    不需要。ctypes等只需要能够链接到目标代码。这取决于目标外语在目标代码中具有适当的名称损坏约定,而C就是这样做的

    如果宿主语言是面向对象的,而外语不是,那么我需要某种对象之间的映射。这是怎么处理的

    C代码需要为宿主语言公开适当的接口;或者等效地,使用一些C语言库来实现。CPython是用C编写的,所以在这种情况下,广义上说这很容易

    如果主机语言在虚拟机上运行该怎么办?在这种情况下,指令集会有所不同,对吗

    VM必须有适当的工具来加载编译的目标代码

    因为它也应该编译外语

    不需要。ctypes等只需要能够链接到目标代码。这取决于目标外语在目标代码中具有适当的名称损坏约定,而C就是这样做的

    如果宿主语言是面向对象的,而外语不是,那么我需要某种对象之间的映射。这是怎么处理的

    C代码需要为宿主语言公开适当的接口;或者等效地,使用一些C语言库来实现。CPython是用C编写的,所以在这种情况下,广义上说这很容易

    如果主机语言在虚拟机上运行该怎么办?在这种情况下,指令集会有所不同,对吗


    VM必须有适当的工具来加载编译的目标代码。

    这是一个完全合理的问题。这个问题很难回答,因为它太笼统了。如果您专门谈论python和C,那么简单的答案是“python知道如何在堆栈上布局参数并跳转到表示已编译C函数的内存”。但shar寻找的很多答案都是针对具体实现的。至少指出一些关于这个主题的好资源可以帮助我理解这是一个完全合理的问题。这个问题很难回答,因为它太笼统了。如果您专门谈论python和C,那么简单的答案是“python知道如何在堆栈上布局参数并跳转到表示已编译C函数的内存”。但shar寻找的很多答案都是针对具体实现的。至少指出一些关于这个主题的好资源可以帮助我理解这是一个完全合理的问题。这个问题很难回答,因为它太笼统了。如果您专门谈论python和C,那么简单的答案是“python知道如何在堆栈上布局参数并跳转到表示已编译C函数的内存”。但是shar所寻找的很多答案都是针对具体实现的。至少指出一些关于这个主题的好资源将有助于我理解这是一个完全合理的问题。这个问题我