問題タブ [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 上の他のすべての OS とは異なる呼び出し規約を使用するのはなぜですか?

AMD には、x86-64 で使用する呼び出し規約を記述した ABI 仕様があります。独自の x86-64 呼び出し規約を持つ Windows を除いて、すべての OS がこれに従います。なんで?

この違いの技術的、歴史的、または政治的な理由を知っている人はいますか、それとも純粋にNIH症候群の問題ですか?

OSが異なれば、より高いレベルのものに対するニーズも異なる可能性があることは理解していますが、たとえば、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:

ここで、XB.dllを読み込んで使用する 2 つ目のアセンブリがあるとします。プロパティを追加すると ABI が壊れますか? /の使用に失敗しますか? そうでない場合、宣言の順序に違いはありますか? プロパティが仮想であった場合、違いはありましたか?A.dllOtherPropertyB.dllA.dllX

私は本当に質問していると思います: 一般的な ABI ルールとは何ですか? 公開後にインターフェイスを変更するのは良くないことだとわかっていますが、サブクラスを追加せずに、一部のインスタンスでプロパティを追加できるようにしたいと考えています。

0 投票する
3 に答える
9389 参照

terminology - ABI(Application Binary Interface)とは?

これはウィキペディアが言うことです:

コンピューター ソフトウェアでは、アプリケーション バイナリ インターフェイス (ABI) は、アプリケーション (または任意の種類の) プログラムとオペレーティング システムまたは別のアプリケーションとの間の低レベル インターフェイスを表します。

ABI は、データ型、サイズ、配置などの詳細をカバーします。関数の引数がどのように渡され、戻り値が取得されるかを制御する呼び出し規則。システム コール番号と、アプリケーションがオペレーティング システムに対してシステム コールを行う方法。完全なオペレーティング システム ABI の場合、オブジェクト ファイル、プログラム ライブラリなどのバイナリ形式。Intel Binary Compatibility Standard (iBCS) などの完全な ABI を使用すると、必要な共有ライブラリが存在し、同様の前提条件が満たされている場合、その ABI をサポートするオペレーティング システムのプログラムを他のオペレーティング システムで変更することなく実行できます。

ABI は規則または標準であり、コンパイラ/リンカーはこの規則を使用してオブジェクト コードを生成すると思います。そうですか?もしそうなら、誰がこれらの慣習を作ったのですか (企業または組織)? ABI がなかったときはどうでしたか? これらの ABI について参照できるドキュメントはありますか?

0 投票する
3 に答える
18445 参照

c - x86_64 va_list 構造体の形式は何ですか?

va_listx86_64 ABI (Linux で使用されるもの) での表現のリファレンスを持っている人はいますか? スタックまたは引数が破損しているように見えるコードをデバッグしようとしていますが、何を見ているのかを理解するのに本当に役立ちます...

0 投票する
1 に答える
1040 参照

c - スタックなしで Linux で syscall を行う

Linux i386 では、int $0x80syscall ABI により、有効なユーザー空間スタックがなくても簡単に syscall を実行できます。一方、vdso/vsyscall インターフェイスは、スタックへのアクセスを必要とします。他の Linux ポート、特に x86_64 はこの点でどうなっていますか? スタックなしでシステムコールを行う方法はありますか? 各アーチで利用可能な syscall メソッドに関するリファレンスはありますか?

0 投票する
1 に答える
412 参照

c++ - 古いバージョンの GCC での C++ / Fortran インターランゲージ ABI の問題

Ubuntu 10.10 でコードをビルドして実行することができました。このコードは、GCC 4.5 でコンパイルされた C++ と、最新バージョンの ifort でコンパイルされた fortran の両方を使用しています。数年前のバージョンの GCC で古い組み込み Linux プラットフォームをサポートする必要がある場合があります (まだクライアントからの仕様を待っています)。残念ながら、彼らのソフトウェアとハ​​ードウェアは軍事用に仕様が定められているため、アップグレードすることはできません. 私の質問は、古いバージョンの GCC でアプリケーションをビルドし、それを最新バージョンの ifort でコンパイルされたライブラリとリンクする際に、ABI の問題に直面する可能性が高いですか?