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に渡すと同じエラーが発生します。
ツールチェーンを少しずつアップグレードするべきではありません。パーツは連携する必要があります。 GNUツールは非常に多くのバリエーションを許可するため、特に クロスコンパイラ の場合は、これらの要素が連携して動作するように設定することが不可欠です。
何らかの理由で新しいld
が必要な場合は、それをサポートするための完全なツールチェーンを構築する必要があります。
@Warren Youngのアドバイスを受けて、リンカーだけをアップグレードするのではなく、ツールチェーンの残りの部分をアップグレードしてください。
ARMのDarwin9以降の場合、 CoolStarによるツールチェーン BigBossリポジトリから入手できることをお勧めします。ツールチェーンには、古いiphone-gccの代わりにLLVM + Clangが含まれているほか、LD64と新しいDarwinCCツールも含まれています。 iphone-gccとLLVM + Clangのより詳細な比較については、 iphone-dev wiki (やや時代遅れ)を参照してください。
EasyBuildツールを使用すると、複数のツールチェーンを自動的に配信できます。 https://hpc.uni.lu/users/software/#sw-toolchain
fi。 ClangGCCを見てください
現在、GCCにはspec strings
のシステムがあり、他のプログラムとの連携とフィードの方法を指定しています。 http://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
あなたの仕事はあなたのニーズに合わせてそれらを調整することです。完了したら、それを文書化するか、他の人が信頼できるEasyBuildツールチェーンを作成してください。