問題タブ [eabi]

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 に答える
13449 参照

gcc - 2 バイトの wchar_t 出力を設定するには?

GCC はデフォルトで 4 バイトwchar_tを使用します。で-fshort-wchar2 バイトを取得するオプションを設定できます。しかし、コンパイラ オプションをソース ファイルに設定すると、有名な警告メッセージが表示されます。wchar_tL"string constants"

foo.o は 2 バイトwchar_tを使用しますが、出力は 4 バイトを使用しますwchar_twchar_tオブジェクト間での値の使用は失敗する可能性があります

私は本当に 2 バイトが必要なwchar_tので、出力にもこのバリアントを使用したいと考えています。私が欲しいものを伝えるリンカーオプションはありますか?

編集

この警告は、リンカが有効な出力を生成することを妨げません。しかし、何十もの誤った警告が他のメッセージを覆い隠しています。

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

c - ARM: フレーム ポインタのないコール スタック生成

OSなし(ベアメタル)のCortex-M3プロセッサ(ARMv7-Mアーキテクチャ)でコールスタックを構築しようとしています。ただし、この ABI にはフレーム ポインタ レジスタがありません。したがって、フレーム ポインターがない場合、コール スタックを生成するのに苦労しています。

-mapcs-frame-fno-omit-frame-pointerおよび-O0GCC のオプションの使用に関係なく、フレーム ポインタは保持されません。フレームポインター/スタックフレームを持っているので、GCCに強制的に使用させることができる別のABIがあるかどうか疑問に思っていますか? そうでない場合、コールスタックを生成する他の信頼できる方法はありますか?

前もって感謝します。

0 投票する
0 に答える
1522 参照

gcc - gnueabi と eabi はどう違いますか?

arm-linux-gnueabi- と arm-linux-eabi- の両方のトリプレットを見てきました。少し調べてみると、gnueabi は eabi の「サブアビ」のようです。具体的にどのような違いがあるのか​​知りたいです。

QNX ターゲット用に clang をコンパイルしようとしているので、どの abi を使用するか迷っています。gnueabi を試してみたところ、小さなプログラムでは問題なく動作しました。

clang のソースを調べたところ、"eabi" std::size_t が Darwin で unsigned long であるのに対し、"gnueabi" は OS に関係なく常に unsigned int を使用することを除いて、2 つの間に大きな違いはないことがわかりました。

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

c - リンクするには、相互に依存する 2 つの静的ライブラリをリンクする必要があります: 未定義参照

私は知っています、それはすでに何百万回も尋ねられました... 残念ながら。

しかし、私は ARM Cortex M4 プロセッサのメタル ビルドに取り組んでいます。したがって、共有ライブラリはなく、静的なものだけです。プログラムを gcc とリンクすると、次のエラーがスローされます。

libFW.a は、_exit() を提供する syscalls.o というファイルを含む、私が作成したライブラリです。

gcc は libg.a と lot_of_code.o をリンクしようとしているようですが、_exit() についてはまだ知りません。しかし、奇妙なことは次のとおりです。syscalls.o に直接リンクすると、正しく動作します。

何が原因でしょうか?

0 投票する
0 に答える
1189 参照

gcc - ツールチェーンが不明な場合の組み込みシステム用の C プログラムのコンパイル

(古い) カスタム組み込みプラットフォームでベンチマークしたい C プログラムがあります。問題は、ハードウェアしか持っておらず、このプラットフォーム用にプログラムをコンパイルするためのツールチェーンがないことです。CPU は Atmel AT91SAM9260 (ARM) で、私がフル アクセスできる組み込み Linux を実行します。組み込みシステムからプログラムをダウンロードし、「readelf -h ...」でその形式を分析しました。

次に、次のテスト プログラムを作成しました。

Ubuntu 12.04 で標準の ARM クロスコンパイラ (arm-linux-gnueabi-gcc test.c -o test) を使用すると、間違った EABI (GNU EABI ではなくバージョン 5 EABI) が選択され、組み込みで実行されません。システム(アクセス権などは正しい)。

Sourcery CodeBench などのベアメタル コンパイラを使用すると、「未定義の参照先...」などのエラーが発生します。stdlib がないため、これは明らかです。すべての lib ファイルを組み込みプラットフォームからホストにコピーし、「./arm-none-eabi-gcc test.c -o test -static -lc -L ./lib」でコンパイルして解決しようとしました。まだ (同じ) 未定義の参照エラーが発生します。

ツールチェーンが不明な場合に、組み込みシステム用の C プログラムをコンパイルするためのベスト プラクティスは何ですか?

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

gcc - -fno-short-enums を無視する GCC (Sourcery codebench 2013.11) リンク時の最適化

簡単なソース ファイルが 2 つある

obj1.cc:

obj2.cc:

Sourcery codebench lite 2013.11 を使用しています。

を使用して各ソースファイルをコンパイルします

-flto なしでそれらをリンクすると、リンク時の最適化が呼び出されず、int サイズの列挙型を持つとマークされたオブジェクト ファイルが取得されます。

しかし、単純に-fltoリンカーの呼び出しに追加すると、出力には小さな列挙型があると主張されます。

でリンク ステップを実行すると-v、gcc が lto ステージに到達したときに次のように表示されます。

LTOステップ中に何かが取り除か-fno-short-enumsれたように見えます。COLLECT_GCC_OPTIONSこれは一般的な gcc の問題であり、Sourcery ビルドに限定されないのではないかと思います。

これはgccのバグですか?32ビット列挙型で構築された特定のライブラリにリンクするために、短い列挙型なしでオブジェクトファイルを生成するにはgccが必要です。ソースから gcc を再構築せずにこの目標を達成する方法はありますか?

更新: arm-none-eabi-gcc 4.8.2-14ubuntu1+6toolchain ( http://packages.ubuntu.com/trusty/devel/gcc-arm-none-eabi ) を使用して、Ubuntu 14.04 でまったく同じ動作を確認しました。)

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

c - ARM EABI コンパイラの説明の memcpy() 命令

ARM EABI コンパイラを使用して memcpy() 関数を使用しています。ファイルにあるように、関数は次のように定義されています

私は一般的にCとポインターにあまり詳しくないので、私の無知を許してください。誰かが const void * の意味を詳しく説明してくれませんか?関数を呼び出している間、それらの構文 (__attribute など) を維持する必要がありますか?

ありがとう!

私の実装: