7

crosstool-ngのおかげで、動作しているクロスコンパイラツールチェーンがあります:)-しかし、crosstool-ngは非常にまばらに文書化されており、クロスコンパイルはまったく新しいものです。このコンテキストでは、特定のホストとターゲットは重要ではないと思います。

ディレクトリ構造についていくつか基本的な質問があります。ツールチェーンは、ターゲットにちなんで名付けられたディレクトリにインストールされました。その中には一連のディレクトリがあります。

arm-unknown-linux-gnueabi
bin
include
lib
libexec
share

bin /のコンパイラはこの目的で動作するため、これは実際のクロスコンパイラビット用であると思います。内部にarm-unknown-linux-gnueabi/ディレクトリがあることに注意してください。つまり、そこにパスがあります../arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi。その中に別の木があります:

bin
debug-root
include
lib
lib32
lib64
sysroot

lib*ディレクトリはsysroot/へのシンボリックリンクです。binにあるものは、親ディレクトリ/binにあるものと同じクロスコンパイルツールのセットのようです。

> bin/gcc -v
Using built-in specs.
COLLECT_GCC=./gcc
Target: arm-unknown-linux-gnueabi
Configured with: /usr/x-tool/.build/src/gcc-4.7.2/configure 
--build=x86_64-build_unknown-linux-gnu 
--host=x86_64-build_unknown-linux-gnu 
--target=arm-unknown-linux-gnueabi

だから私の最初の質問は:これらは何のためにあるのですか?そして、このディレクトリは何のためにあるのでしょうか?

次に、私の2番目の質問は、sysroot/をどのように使用する必要があるかということです。どうやらターゲットプラットフォームにネイティブなサポートライブラリ用なので、そのようなライブラリを構築する場合は、それをとして使用する必要がある--prefix思いますが、lib *はシンボリックリンクされているため、親ディレクトリを使用するのと同じことになります...ビンとsysrootまでのシンボリックリンクを持つこの「真ん中のディレクトリ」は混乱を招きます。(いくつかの)autotoolsスタイルのパッケージは「--with-sysroot」で構成できると思います。 それを見ると、その意味は何ですか?また、-prefixなどの他のオプションとの関連でどのように使用する必要がありますか?

4

2 に答える 2

5

あなたの最初の質問については、ツールチェーンがインストールされたディレクトリとして:

  • bin / arm-unknown-linux-gnueabi-gcc
  • arm-unknown-linux-gnueabi / bin / gcc

それらは同じで、確かにハードリンクです。

あなたはCC=arm-unknown-linux-gnueabi-gccによってarm-unknown-linux-gnueabi-gccを使うことができます、例えば

export PATH=<toolchain installed dir>/bin:$PATH
CC=arm-unknown-linux-gnueabi-gcc ./configure 
make

または

export PATH=<toolchain installed dir>/arm-unknown-linux-gnueabi/bin:$PATH
./configure 
make

私はいつも最初の形式を使用しましたが、後者の形式が機能するかどうかはわかりません。

2番目の質問については、私の経験では、sysrootについて心配する必要はありません。クロスコンパイラーは、sysroot / usr/include内の正しいCヘッダーファイルを自動的に検出します。

いくつかのライブラリをクロスコンパイルしてsysrootにインストールする場合を除いて、次の方法で取得できます。

export PATH=<toolchain installed dir>/bin:$PATH
CC=arm-unknown-linux-gnueabi-gcc ./configure --prefix=<toolchain installed dir>/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot
make
make install
于 2014-06-16T12:30:37.830 に答える
2

ThomasPetazzoniによる講演AnatomyofCross -Compilation Toolchainsの38:39から、講演者は出力ディレクトリ構造の詳細なウォークスルーを行います。

于 2019-07-29T10:51:22.803 に答える