私は、Dockerコンテナ(thewtex/cross-compiler-linux-armv7
)を使用して、Fedora 23 x86_64
シンプルな "Hello World" Linuxユーザー空間Cプログラムをクロスコンパイルしています。ターゲットシステムは、ARMv7組み込みシステム(特に、ストックファームウェアを搭載したKobo Aura HD e-reader)です。ARM Linux実行ファイルがx86_64で不思議に動作する
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello World!\n");
return 0;
}
私が生成したシェルスクリプトが何らかの理由
docker run thewtex/cross-compiler-linux-armv7 > ./dockcross.sh
chmod +x dockcross.sh
次のコマンドセットを使用してコンパイラを呼び出し、次のように
プログラム(hello_world.c
)のソースコードでありますバギー、私は手動で/cross-compiler-base/cross-compiler-linux-armv7/
と/:build/:build:z/
をdockcross.sh
に置き換えなければならない。今、私は
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=317a9ea164931f614b24e98dec743050e2d7f900, not stripped
予想に反して結果hello
実行可能な程度
./dockcross.sh arm-linux-gnueabihf-cc hello_world.c -static -o hello
file
戻り、次の情報を実行して、私は、ホストシステム上で生成される実行可能ファイルを実行することができます。
[email protected]:~/tmp/test$ uname -a && ./hello
Linux andreas-pc 4.5.5-201.fc23.x86_64 #1 SMP Sat May 21 15:29:49 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Hello World!
だけでなく、ターゲットデバイス上で
[[email protected](none) onboard]# uname -a && ./hello
Linux (none) 2.6.35.3-850-gbc67621+ #1038 PREEMPT Thu Apr 25 15:48:22 CST 2013 armv7l GNU/Linux
Hello World!
これについて何か説明がありますか?
誰かが[binfmt_misc](https://en.m.wikipedia.org/wiki/Binfmt_misc)をあなたのために設定し、それをarm実行ファイルがqemuを実行するように設定している可能性があります。 –
ありがとう、binfmt_miscは確かにこの魔法を可能にする仕組みです。私はこの質問に答えるつもりです。 –