Autconfを使用して私の腕のボードのライブラリをクロスコンパイルするのに問題があります。
私はこの行を使用しています:
./configure --target=arm-linux --Host=arm-linux --prefix=/bla/bla/bla/linux_arm_tool CFLAGS='-m32'
make
make install
file
を実行して確認すると、次のようになります。
libjpeg.so.8.4.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped
それはまったく正しくないようですが、とにかくそれを使ってみました...そして私は得ます:
/usr/lib/gcc/arm-linux-gnueabi/4.5.3/../../../../arm-linux-gnueabi/bin/ld: skipping incompatible /bla/bla/bla/bla/../linux_arm_tool/lib/libjpeg.so when searching for -ljpeg
私は途方に暮れています、私は1時間グーグルで過ごしています...
したがって、本当に基本的なメソッド呼び出しを使用する前にクロスコンパイルしたことを知っていて、出力を調べた後、なぜこれを回避したのかを理解しました。
checking for arm-linux-gnueabi-gcc... no
checking for gcc... gcc
...
...
checking for arm-linux-gnueabi-gcc... gcc
私の/usr/bin
ありませんでしたarm-linux-gnueabi-gcc
、 そうしなければならなかった:
ln -s /usr/bin/arm-linux-gnueabi-gcc-4.5 /usr/bin/arm-linux-gnueabi-gcc
私は正常にクロスコンパイルしました:
./configure --Host=arm-linux-gnueabi -prefix=${CSTOOL_DIR}/linux_arm_tool
リンクについては...いくつかのことを確認する必要がありますが、いくつかの-rpath-link
より高度なコンパイルのフラグ。
問題は、より一般的には「Autoconfを使用してARMのクロスコンパイルを行うにはどうすればよいですか」と言い換えることができると思います。
./configure -h
によると:
System types:
--build=BUILD configure for building on BUILD [guessed]
--Host=HOST cross-compile to build programs to run on Host [BUILD]
公式のGNUドキュメントはこの質問に答えるのに役立ちます:
--Host
と--build
の使用法を定義するときに注意してください。
Therefore, whenever you specify --Host, be sure to specify --build too.
そして、ここに、組み込みのARMプラットフォーム用にiperf
を構成するために使用した例を示します。
まず最初に、「./ configure」スクリプトは実際には「Autoconf」と呼ばれ、グーグルの助けになります。ここでの考え方は:
適切な--Hostと--buildを与える
buildpath <--- my little script to setup my $PATH
export CC=arm_v5t_le-gcc
export CXX=arm_v5t_le-g++
./configure --Host=armv5tl-montavista-linux-gnueabi --build=x86_64-linux-gnu
環境変数CC、LD、およびその他の関連する変数をオーバーライドする必要があります。これらのスイッチを設定しても、クロスツールチェーンの場所がどこにあるかはわかりません(どこにでもある可能性があります)。
たとえば、さまざまなプロジェクトのいくつかのガイドを確認してください。 http://wiki.wxwidgets.org/Cross-Compiling_Under_Linux
また、node.jsのクロスコンパイルをセットアップするために作成したスクリプトもここにあります-同じアイデア: https://Gist.github.com/edhemphill/5094239
Libjpegは、x86バイナリであるb/cでは機能しません。次のように指定する必要があります。
ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, not stripped
または類似。
これがskipping incompatible
を取得する理由です
# Install arm-linux-gnueabi packages
apt-get install libc6-armel-cross libc6-dev-armel-cross \
binutils-arm-linux-gnueabi arm-linux-gnueabi-gcc libncurses5-dev
./configure --target=arm-linux-gnueabi --Host=arm-linux-gnueabi
...
checking for arm-linux-gnueabi-gcc... arm-linux-gnueabi-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... yes
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether arm-linux-gnueabi-gcc accepts -g... yes
checking for arm-linux-gnueabi-gcc option to accept ISO C89... none needed
checking whether arm-linux-gnueabi-gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of arm-linux-gnueabi-gcc... gcc3
...
make
arm-linux-gnueabi-gcc -DPACKAGE_NAME=\"Tutorial\ Program\" -DPACKAGE_TARNAME=\"tutorial-program\" -DPACKAGE_VERSION=\"1.0\" -DPACKAGE_STRING=\"Tutorial\ Program\ 1.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"tutorial-program\" -DVERSION=\"1.0\" -I. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c