gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:18:30 25 4
gpt4 key购买 nike

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

最佳答案

用 C89 编写的带有反射的解释器,谁知道?


我感觉您正在寻找有关机制的解释,而不是指向 API 的链接或有关如何对其进行编码的说明。所以,据我了解。 . .

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

那么,只需让解释后的代码告诉解释器调用特定 native 库中的特定 native 函数即可。

该机制可以是模块化的。用脚本编写的解释器扩展库本身可以调用 dlopen(3)dlsym(3) 的裸钩子(Hook)并连接到一个新库口译员从来不知道。

对于按值传递简单对象,一些原型(prototype)函数通常允许各种调用。但是对于结构化数据对象(想象一下 stat(2)),包装器模块需要知道数据的布局。在某些时候,无论是在打包扩展模块时还是在安装它时,C 接口(interface)模块都会包含适当的头文件,并结合手写代码构造一个接口(interface)对象。这就是为什么你可能需要安装类似 libsqlite3-dev 的东西,即使你的系统上已经有 sqlite3 了;只有 -dev 包有重新编译链接代码所需的 .h 文件。

我想我们可以这样总结:“这是用蛮力和无知完成的”。 :-)

关于java - 如何将一种语言(例如 python)绑定(bind)到另一种语言(例如 C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1475637/

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