web-dev-qa-db-ja.com

GCC:リンカーに渡すアーキテクチャを設定する

GNU Cコンパイラは、間違ったアーキテクチャ名をリンカに渡します。たとえば、gcc helloworld.iはエラーld: unknown/unsupported architecture name: -Arch armをスローします。 LDを試してみたところ、armv7が使用すべきアーキテクチャのようです。コンパイルとアセンブルの操作はうまくいくようです。

コンパイラコレクション(iphone-gcc)は、オープンソースのDarwin CCツールを通じて提供される古いバージョンのリンカーで動作するように設計されているようです。CCツールコレクションの外部でスタンドアロンとして提供されている、インストールした新しいLD64ではありません。 。 GCCに別のアーキテクチャをリンカに渡すように指示する方法はありますか?-Wl,-Arch,armv7または-Xlinker -Arch -Xlinker armv7をGCCに渡すと同じエラーが発生します。

1
osvein

ツールチェーンを少しずつアップグレードするべきではありません。パーツは連携する必要があります。 GNUツールは非常に多くのバリエーションを許可するため、特に クロスコンパイラ の場合は、これらの要素が連携して動作するように設定することが不可欠です。

何らかの理由で新しいldが必要な場合は、それをサポートするための完全なツールチェーンを構築する必要があります。

3
Warren Young

@Warren Youngのアドバイスを受けて、リンカーだけをアップグレードするのではなく、ツールチェーンの残りの部分をアップグレードしてください。

ARMのDarwin9以降の場合、 CoolStarによるツールチェーン BigBossリポジトリから入手できることをお勧めします。ツールチェーンには、古いiphone-gccの代わりにLLVM + Clangが含まれているほか、LD64と新しいDarwinCCツールも含まれています。 iphone-gccとLLVM + Clangのより詳細な比較については、 iphone-dev wiki (やや時代遅れ)を参照してください。

1
osvein

EasyBuildツールを使用すると、複数のツールチェーンを自動的に配信できます。 https://hpc.uni.lu/users/software/#sw-toolchain
fi。 ClangGCCを見てください

現在、GCCにはspec stringsのシステムがあり、他のプログラムとの連携とフィードの方法を指定しています。 http://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html

あなたの仕事はあなたのニーズに合わせてそれらを調整することです。完了したら、それを文書化するか、他の人が信頼できるEasyBuildツールチェーンを作成してください。

0
fgeorgatos