首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将一种语言(例如python)绑定到另一种语言(例如C++)?

如何将一种语言(例如python)绑定到另一种语言(例如C++)?
EN

Stack Overflow用户
提问于 2018-03-01 05:11:19
回答 2查看 0关注 0票数 0

我不是Python专家,但我经常听到这个,关于它的C/C++绑定。这个概念是如何工作的,Python(和Java)如何绑定到基于C的API(如OpenGL)?这东西对我来说一直是个谜。

EN

回答 2

Stack Overflow用户

发布于 2018-03-01 14:00:27

主解释器通常是用C编写的,并且是动态链接的。在动态链接的环境中,即使是C89也有一定的反射行为。特别是,dlopen(3)dlsym(3)调用将加载动态(通常为ELF)库,并查找由字符串命名的符号的地址。给出那个地址,解释器就可以调用一个函数。即使是静态链接,解释器也可以知道C函数的地址,这些函数的名称被编译到C函数中。

因此,这只是一个简单的问题,就是让解释的代码告诉解释器在特定的本机库中调用特定的本机函数。

机构可以是模块化的。在脚本中编写的解释器扩展库本身可以调用dlopen(3)dlsym(3)并连接到一个新的库,这是翻译从来不知道的。

为了通过值传递简单的对象,一些原型函数通常会允许各种调用。但是对于结构化数据对象(想象一下stat(2)),包装模块需要知道数据的布局。在某个时候,无论是打包扩展模块还是安装扩展模块,C接口模块都包含适当的头文件,并与手写代码一起构造接口对象。这就是为什么可能需要安装以下内容libsqlite3-dev

票数 0
EN

Stack Overflow用户

发布于 2018-03-01 14:29:43

对于Java而言外部函数接口主要的概念被称为FFI,它是JNI,Python是“Python C API”,Perl是XS等等。

给定一个FFI,你可以编写它的C程序,和/或你可以使用代码生成器从其他语言编写的代码接收元信息中生成这样的C代码。

还有一些特殊语言,比如Cython,它是Python的一个“扩展子集”,它可以轻松生成FFI代码,同时匹配Python的大部分语法和语义 - 可能通常是大多数Python程序员编写Python扩展的最简单方式模块可以编译成快速机器代码,也可以使用一些现有的C-callable库。

这种ctypes方法与传统的FFI方法不同,虽然它自我描述为“Python的外部函数库” - 它依赖于DLL中可用的外部代码(或等效的代码,例如.so动态库在Linux中),并在运行时生成和执行代码以达到动态加载的C代码。方便地避免必须安装任何特殊的工具,用于使用Python访问现有DLL的简单任务,但我认为它不能像FFI“基于链接器”的方法那样扩展(因为它需要更多的运行时间等等) 。我不知道其他语言的其他语言的其他语言的实现,除了python的ctypes以外。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档