gpt4 book ai didi

c++ - 语言 "binding"如何与现有库通信?

转载 作者:搜寻专家 更新时间:2023-11-01 00:41:40 25 4
gpt4 key购买 nike

我试图了解绑定(bind)(端口)到另一种语言的一般工作方式,但为了帮助澄清我的问题,我将使用名为 libsass 的项目的直接示例。 (Sass 编译器的 C/C++ 实现)。
还有一个项目node-sass这是 Node.js 绑定(bind)到 libsass。

我假设这意味着 node-sass 是一个在 nodejs 上运行的 javascript 程序,nodejs 充当 libsass C++ 系统级程序的代理转发指令。

enter image description here

我的问题是:nodejs 解释器如何与 libsass C++ 应用程序“对话”? - 是否使用套接字?

子问题:如果 node-sass 通过初始化您自己的 Node 脚本可用的对象、函数等在 Node 环境中公开 API - 根据定义,这是“绑定(bind)” “?

最佳答案

C++ 库部分是,考虑到它确实是一个库而不是一些服务器程序,它不会自行运行,也不会监听某些套接字。如果在 C++ 程序中使用 C++ 库,它也会集成到该程序进程中,而不是在其他地方运行。

许多语言都内置了访问本地 C 语言 API 的可能性,包括 Node.js (C 是语言互操作性的实际标准,例如,因为每个比较重要的操作系统也主要由 C 组成。)关于 C++ 与 C,用 C++ 编写一些东西并提供 C 接口(interface)并不难。

在这种情况下,语言绑定(bind)通常只不过是将复杂的 native 访问部分包装在目标语言中更易于使用的内容中。

由于评论而进一步详细说明:

操作系统本身有函数(用于 C 程序)来动态加载 C 库,获取它们的特定函数并调用它们,而在编译 C 程序时不知道库和函数的名称(例如. 你可以制作一个 C 程序,它要求 用户 输入一个库名称,然后使用...)。

独立于此,每种语言要么以将程序编译为包含 CPU 指令等的“真实”程序的方式制作,这些程序可以直接执行(例如:C),要么制作该语言的程序是其他格式,但每次启动都需要一个“真正的”程序来帮助 OS/CPU 理解应该做什么(例如:Javascript、Java……如果没有安装辅助软件,你不能单独运行一个程序,如浏览器或 JRE)。

对于第二种类型,辅助软件可以利用操作系统的库加载功能,如果 JS/Java 程序包含这样做的指令......(对于第一种“真实”类型,某个与 C 库的兼容性级别是自动给出的,因为它们使用相同的二进制格式(是的,这是简化的))

关于c++ - 语言 "binding"如何与现有库通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32172283/

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