これらは/ usr/bin内のファイルです
[root@xilinx bin]# ls -ld arm*
-rwxr-xr-x. 1 root root 691752 Feb 5 2013 arm-linux-gnu-addr2line
-rwxr-xr-x. 1 root root 721416 Feb 5 2013 arm-linux-gnu-ar
-rwxr-xr-x. 1 root root 1297632 Feb 5 2013 arm-linux-gnu-as
-rwxr-xr-x. 1 root root 689168 Feb 5 2013 arm-linux-gnu-c++filt
-rwxr-xr-x. 1 root root 545664 Feb 6 2013 arm-linux-gnu-cpp
-rwxr-xr-x. 1 root root 34176 Feb 5 2013 arm-linux-gnu-elfedit
-rwxr-xr-x. 1 root root 544624 Feb 6 2013 arm-linux-gnu-gcc
-rwxr-xr-x. 1 root root 214400 Feb 6 2013 arm-linux-gnu-gcov
-rwxr-xr-x. 1 root root 760640 Feb 5 2013 arm-linux-gnu-gprof
-rwxr-xr-x. 2 root root 1177528 Feb 5 2013 arm-linux-gnu-ld
-rwxr-xr-x. 2 root root 1177528 Feb 5 2013 arm-linux-gnu-ld.bfd
-rwxr-xr-x. 1 root root 704672 Feb 5 2013 arm-linux-gnu-nm
-rwxr-xr-x. 1 root root 875456 Feb 5 2013 arm-linux-gnu-objcopy
-rwxr-xr-x. 1 root root 1096992 Feb 5 2013 arm-linux-gnu-objdump
-rwxr-xr-x. 1 root root 721456 Feb 5 2013 arm-linux-gnu-ranlib
-rwxr-xr-x. 1 root root 389040 Feb 5 2013 arm-linux-gnu-readelf
-rwxr-xr-x. 1 root root 693608 Feb 5 2013 arm-linux-gnu-size
-rwxr-xr-x. 1 root root 691648 Feb 5 2013 arm-linux-gnu-strings
-rwxr-xr-x. 1 root root 875456 Feb 5 2013 arm-linux-gnu-strip
私は次のとおりです このチュートリアル 単純なCプログラムをクロスコンパイルします:
/* myinit.c
* Build instructions:
* ${CROSS_COMPILE}gcc -static init.c -o init
* */
#include <stdio.h>
int
main ()
{
printf ("\n");
printf ("Hello world from %s!\n", __FILE__);
while (1) { }
return 0;
}
これを.cファイルとして保存し、コンパイルしてみます。
[root@xilinx Xilinx-ZC702-14.7]# arm-linux-gnu-gcc myinit.c
myinit.c:6:19: fatal error: stdio.h: No such file or directory
compilation terminated.
これは、arm-linux-gnu-gccを使用している場合にのみ発生します。
しかし、gccを使用している場合は、正常に機能します。
Arm-linux *でこのエラーが発生するのはなぜですか?
更新
[root@xilinx Xilinx-ZC702-14.7]# arm-linux-gnu-cpp -Wp,-v
ignoring nonexistent directory "/usr/lib/gcc/arm-linux-gnueabi/4.7.2/../../../../arm-linux-gnueabi/sys-include"
ignoring nonexistent directory "/usr/lib/gcc/arm-linux-gnueabi/4.7.2/../../../../arm-linux-gnueabi/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/arm-linux-gnueabi/4.7.2/include
/usr/lib/gcc/arm-linux-gnueabi/4.7.2/include-fixed
End of search list.
詳細
[root@xilinx Xilinx-ZC702-14.7]# arm-linux-gnu-gcc -v myinit.c
Using built-in specs.
COLLECT_GCC=arm-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/arm-linux-gnueabi/4.7.2/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../gcc-4.7.2-20121114-aarch64/configure --disable-dependency-tracking --disable-silent-rules --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --build=x86_64-redhat-linux-gnu --Host=x86_64-redhat-linux-gnu --target=arm-linux-gnueabi --enable-targets=all --program-prefix=arm-linux-gnu- --enable-languages=c --with-newlib --without-headers --disable-sjlj-exceptions --with-system-libunwind --disable-nls --disable-threads --disable-shared --disable-libmudflap --disable-libssp --disable-libgomp --disable-libquadmath --disable-gold --disable-decimal-float --enable-checking= --enable-gnu-unique-object --enable-linker-build-id --disable-plugin --enable-nls --with-system-zlib --with-bugurl=http://bugzilla.redhat.com/bugzilla/ --enable-obsolete
Thread model: single
gcc version 4.7.2 20121105 (Red Hat 4.7.2-2.aa.20121114svn) (GCC)
COLLECT_GCC_OPTIONS='-v' '-mtls-dialect=gnu'
/usr/libexec/gcc/arm-linux-gnueabi/4.7.2/cc1 -quiet -v myinit.c -quiet -dumpbase myinit.c -mtls-dialect=gnu -auxbase myinit -version -o /tmp/ccZNNlzj.s
GNU C (GCC) version 4.7.2 20121105 (Red Hat 4.7.2-2.aa.20121114svn) (arm-linux-gnueabi)
compiled by GNU C version 4.4.6 20120305 (Red Hat 4.4.6-4), GMP version 4.3.1, MPFR version 2.4.1, MPC version 0.8
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/lib/gcc/arm-linux-gnueabi/4.7.2/../../../../arm-linux-gnueabi/sys-include"
ignoring nonexistent directory "/usr/lib/gcc/arm-linux-gnueabi/4.7.2/../../../../arm-linux-gnueabi/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/arm-linux-gnueabi/4.7.2/include
/usr/lib/gcc/arm-linux-gnueabi/4.7.2/include-fixed
End of search list.
GNU C (GCC) version 4.7.2 20121105 (Red Hat 4.7.2-2.aa.20121114svn) (arm-linux-gnueabi)
compiled by GNU C version 4.4.6 20120305 (Red Hat 4.4.6-4), GMP version 4.3.1, MPFR version 2.4.1, MPC version 0.8
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: a19a7c6897fa348d9d5b59c718fa0648
myinit.c:6:19: fatal error: stdio.h: No such file or directory
compilation terminated.
ホスト構成
Redhat 6、64ビット
ここでの問題は、ターゲットのコンパイラツールチェーンをインストールしたが、ターゲットの標準ライブラリをインストールしなかったことです。ターゲットプラットフォーム用に特別にコンパイルされた標準Cライブラリが必要です。コンパイラツールチェーンを見つけたのと同じ場所からプリコンパイルされたものを見つけるか、ダウンロードしてターゲットツールチェーンを使用してクロスコンパイルします。
ターゲット用の標準Cライブラリがある場合は、フラグ-I
(大文字のi)を使用してコンパイラにヘッダーファイルの場所を指示し、-L
フラグを使用してリンカーに検索場所を指示します。ライブラリ、および例えば-lc
(小文字のL)は、リンカにライブラリとリンクするように指示します。何かのようなもの
$ arm-linux-gnu-gcc -I/usr/local/target/include myinit.c -L/usr/local/target/lib -lc
これは、「arm-none-eabi-newlib」をインストールすることで修正されました。
$ Sudo yum install arm-none-eabi-newlib
必要なファイルが正しいパスに含まれていました。
ここで最も可能性の高い問題は、このクロスコンパイラが生成されたときにsysrootパスが設定されていなかったことです。ツールチェーン開発者には、そうする独自の理由があります。行うことで確認できます
$ arm-linux-gnu-gcc -print-sysroot
/not/exist
ツールチェーンの開発者は、クロスコンパイルに$ {CXX} $ {CC}などの標準環境変数を使用することを期待しています。彼らは通常、この目的のために、とりわけ以下を行うスクリプトを提供します。
$ export SDKTARGETSYSROOT=/path/to/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
$ export CC="arm-linux-gnu-gcc -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=$SDKTARGETSYSROOT"
したがって、*。cプログラム(この場合はmyinit.c)をコンパイルするには、これを行います。
$ ${CC} myinit.c
またはあなたが私のように古い学校なら
$ arm-linux-gnu-gcc -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=$SDKTARGETSYSROOT myinit.c