问题标签 [abi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
466 浏览

c++ - 命名空间嵌套函数的最佳实践和语义以及 extern "C" 的使用

我正在创建一个带有 C-ABI 接口的 C++ 库。

这就是 GCC 如何处理关于修饰的 extern "C" 限定符:

相关nm输出:

问题: 我想将 C-ABI 中涉及的函数留在命名空间中,以实现最大的重用灵活性。重要提示:一旦库编译完成,我将给链接器一个映射文件 (GCC) 或一个模块定义文件 (MSVC)。

  1. 重整输出标准行为——其他主要编译器(特定于 MSVC)是否也会剥离重整?
  2. 当他们涉及外部 ABI 时,他们是否有任何关于将函数放置在名称空间中的陷阱或最佳实践?
  3. 这会在链接期间干扰解构函数的 C-ABI 导出吗?
0 投票
4 回答
27541 浏览

windows - 为什么 Windows64 使用与 x86-64 上的所有其他操作系统不同的调用约定?

AMD 有一个 ABI 规范,描述了在 x86-64 上使用的调用约定。所有操作系统都遵循它,除了具有自己的 x86-64 调用约定的 Windows。为什么?

有谁知道这种差异的技术、历史或政治原因,还是纯粹是 NIH 综合症的问题?

我知道不同的操作系统可能对更高级别的东西有不同的需求,但这并不能解释为什么例如 Windows 上的寄存器参数传递顺序是rcx - rdx - r8 - r9 - rest on stack其他人都使用rdi - rsi - rdx - rcx - r8 - r9 - rest on stack.

PS 我知道这些调用约定通常有何不同,并且如果需要,我知道在哪里可以找到详细信息。我想知道为什么

编辑:关于如何,参见例如维基百科条目和那里的链接。

0 投票
1 回答
6116 浏览

boolean - opencl 支持布尔变量吗?

openCL 是否支持布尔变量?我目前正在使用 JOCL (java) 编写我的 openCL 调用代码,但我没有看到任何关于布尔值的信息。

0 投票
9 回答
23709 浏览

c - C 有标准 ABI 吗?

其他地方的讨论:

C++ 没有标准的 ABI(应用程序二进制接口)

但C也不行,对吧?

在任何给定的平台上,它几乎都可以。如果缺少一种语言,它就无法作为跨语言交流的通用语言。

你对此有何看法?

0 投票
13 回答
78976 浏览

c++ - 为什么布尔值是 1 字节而不是 1 位大小?

在 C++ 中,

  • 为什么布尔值是 1 字节而不是 1 位大小?
  • 为什么没有像 4 位或 2 位整数这样的类型?

在为 CPU 编写模拟器时,我错过了上述内容

0 投票
3 回答
2509 浏览

c# - C#接口损坏,ABI

假设我们有class X版本 1 的程序集A.dll

然后在程序集的第 2 版中A.dll

现在假设我们有第二个程序集B.dll加载A.dll并使用 X。添加属性会OtherProperty破坏 ABI 吗?将B.dll无法使用A.dll/ X?如果不是,声明的顺序会有什么不同吗?如果这些属性是虚拟的,它有什么不同吗?

我想我真的在问:一般的 ABI 规则是什么?我知道在发布后更改接口是一件坏事,但我真的希望能够在某些情况下添加属性,而无需添加子类。

0 投票
3 回答
9389 浏览

terminology - 什么是 ABI(应用程序二进制接口)?

这是维基百科所说的:

在计算机软件中,应用程序二进制接口 (ABI) 描述了应用程序(或任何类型的)程序与操作系统或另一个应用程序之间的低级接口。

ABI 涵盖数据类型、大小和对齐方式等细节;调用约定,它控制函数的参数如何传递和返回值的检索;系统调用号以及应用程序应如何对操作系统进行系统调用;而在完整的操作系统ABI的情况下,目标文件、程序库等的二进制格式。一个完整的 ABI,例如英特尔二进制兼容性标准 (iBCS),允许来自一个支持该 ABI 的操作系统的程序无需修改即可在任何其他此类系统上运行,前提是存在必要的共享库并满足类似的先决条件。

我猜 ABI 是一种约定或标准,编译器/链接器使用此约定来生成目标代码。那正确吗?如果是这样,谁制定了这些约定(公司或某些组织)?没有 ABI 的时候是什么样的?是否有关于这些 ABI 的文档可供我们参考?

0 投票
3 回答
18445 浏览

c - x86_64 va_list 结构的格式是什么?

va_list有人对 x86_64 ABI(Linux 上使用的那个)的表示有参考吗?我正在尝试调试一些堆栈或参数似乎已损坏的代码,这真的有助于理解我应该看到的内容......

0 投票
1 回答
1040 浏览

c - 在没有堆栈的 Linux 上进行系统调用

在 Linux i386 上,int $0x80系统调用 ABI 可以在没有有效用户空间堆栈的情况下轻松执行系统调用。另一方面,vdso/vsyscall 接口需要访问堆栈。其他 Linux 端口在这方面的表现如何,尤其是 x86_64?他们有办法在没有堆栈的情况下进行系统调用吗?每个拱门的可用系统调用方法是否有参考?

0 投票
1 回答
412 浏览

c++ - 旧版本 GCC 的 C++/Fortran 间语言 ABI 问题

我们已经设法让我们的代码在 Ubuntu 10.10 上构建和运行。该代码使用了用 GCC 4.5 编译的 C++ 和用最新版本的 ifort 编译的 fortran。我们可能需要使用几年前的 GCC 版本支持较旧的嵌入式 linux 平台(仍在等待客户的规范)。不幸的是,他们的软件和硬件已指定用于军事用途,因此无法升级。我的问题是我们是否可能会面临 ABI 问题,使用旧版本的 GCC 构建我们的应用程序并将其与使用最新版本 ifort 编译的库链接?