GCC のldは、リンクする正しいライブラリを見つけるために最善を尽くします。私の知る限り、 -mcpu 、 -mthumb 、 -mfpu 、および -mfloat-abi を考慮しています(以下の例を参照)。このリストは完全ではない可能性があります。おそらく-mthumb-interworkも考慮されます。-mcpuが指定されている場合、アーキテクチャはその値から派生します。
したがって、これらのオプションはldに渡す必要があり、 ldが実際に正しい multilib を選択することを確認する必要があります。
これらの各オプションには、正しい方向に導かない可能性のある組み込みのデフォルト値があります。
一致するライブラリが見つからない場合、 ldはデフォルトのライブラリにフォールバックします。エラーメッセージはありません。
したがって、あなたの場合 - -mcpuをldに渡し、ツールチェーンのインストールが正しいと仮定すると、一致する multilib がない可能性があり、ldはデフォルトのものを使用します。リンク プロセスは技術的には成功しますが、必要な結果が得られません。
いくつかの例 (arm-none-eabi-gcc 4.6.2)
利用可能なマルチライブラリ:
$ arm-none-eabi-gcc -print-multi-lib
.;
thumb/arm7tdmi-s;@mthumb@mcpu=arm7tdmi-s
thumb/cortex-m0;@mthumb@mcpu=cortex-m0
thumb/cortex-m3;@mthumb@mcpu=cortex-m3
thumb/cortex-m4;@mthumb@mcpu=cortex-m4
thumb/cortex-m4/float-abi-hard/fpuv4-sp-d16;@mthumb@mcpu=cortex-m4@mfloat-abi=hard@mfpu=fpv4-sp-d16
デフォルト
$ arm-none-eabi-gcc -print-multi-directory
.
特定の cpu の multilib が見つからない場合は、デフォルトも使用されます。エラー メッセージは表示されません。
$ arm-none-eabi-gcc -print-multi-directory -mcpu=arm926ej-s
.
-mcpuが「明らかに」間違っている (つまり、 arm-none-eabi-gcc --target-help で確認できる既知の ARM CPU のリストに cpu が含まれていない)場合でも、エラー メッセージは表示されません。
$ arm-none-eabi-gcc -print-multi-directory -mcpu=xxx
.
-mcpu=cortex-m4を使用しても、無効な multilib が選択されます。cm4 は親指のみをサポートするため、この値は-mcpuから導出できますが、組み込みのデフォルトが優先されます。
$ arm-none-eabi-gcc -print-multi-directory -mcpu=cortex-m4
.
cm4 の正しい multlib を取得するには、-mthumbも必要です。これは、命令セットのデフォルト値をオーバーライドするために必要です。
$ arm-none-eabi-gcc -print-multi-directory -mcpu=cortex-m4 -mthumb
thumb/cortex-m4
浮動小数点演算のハードウェア サポートを備えた cm4 の正しい multilib を取得するには、-mfpuでは不十分な場合があります。
$ arm-none-eabi-gcc -print-multi-directory -mcpu=cortex-m4 -mthumb -mfloat-abi=hard
.
それが必要です
$ arm-none-eabi-gcc -print-multi-directory -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16
thumb/cortex-m4/float-abi-hard/fpuv4-sp-d16
multilib に関する詳細は、こちらとauselenの回答にあります。
auselen が既にコメントしたように、これを解決する最も簡単な方法は、適切なツールチェーンを見つけることです。ARM ツールチェーンの構築は別の話です。