web-dev-qa-db-ja.com

ARMのhelloworldをクロスコンパイルします

ARM-CORTEX-A9の単純なクロスコンパイル(cc)を試しています。物事を単純に保つために、cコードは次のとおりです。

_#include <stdio.h>
int main()
{
   printf("Hello World!\n");
   return 0;
}
_

アームでのネイティブコンパイルは正常に機能し、_gcc helloworld.c -o helloworld_で開始されますが、クロスコンパイルは_arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_cc_で開始されます。

GCCバージョン:

nativ:gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) Target: arm-linux-gnueabihf

CC:gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-79) Target: arm-xilinx-linux-gnueabi

readelfからのABI:

readelf-nativ:_OS: Linux, ABI: 2.6.31_ readelf-cc:_OS: Linux, ABI: 2.6.16_

リンクされたライブラリ-クロスコンパイルされたものは静的にリンクされているため、ライブラリを見逃すことはありません:

_root@localhost:/temp# ldd helloworld
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6ed8000)
        /lib/ld-linux-armhf.so.3 (0xb6fce000)
root@localhost:/temp# ldd helloworld_cc
        not a dynamic executable
_

問題:ネイティブプログラムは正常に実行され、ccは常に次のようになります。

_root@localhost:/tmp# ./helloworld_cc
-bash: ./helloworld_cc: No such file or directory
_

ヒント、うまくいけば、十分な情報が含まれています。

edit

静的にリンクするとうまくいきますが、ファイルのサイズは巨大です(678kB(CC-static)と4kB(native)ですか?動的にリンクされていないと言われているのに、なぜlibsが欠けているのでしょうか?同様の質問:- 静的C hello world for Android using arm-linux-gnueabi-gcc のクロスコンパイル

_arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_cc -static
_
13
eactor

それらはlibフォルダーLinaro Ubuntuのミッシングリンクでした。 readelf -aで表示されました

[Requesting program interpreter: /lib/ld-linux.so.3]

リンクlib/ld-linux.so.3lib/arm-linux-gnueabihf/ld-2.15.soに配置する

そしてそれは動作します。

助けてくれてありがとうセルゲイ

9
eactor