電子書籍の厳選無料作品が豊富!

Ubuntu Linuxなどでgccのコンパイラを使用して作成したアプリケーションの実行ファイルを他のLinuxでも実行させることなどは可能でしょうか?

いまBeagleBone BlackというAngstrom Linuxというのが実装されている基板でのアプリケーションを作成しているのですが、

自分のPCにUbuntu Linuxがインストールされていたので、こちらでHello worldのプログラムを作ってgccコンパイルしてできた実行ファイルをBeagleBone Blackに移して、コマンドラインで


./hello_a.out


これで実行してみたのですが、

./hello_a.out:cannot execute binary file


このようなエラーがでて実行することができません。



どなたかご教授頂きますよう、お願い致します。

A 回答 (3件)

ライブラリとか適合できれば動作するでしょう。


当たり前ですが、CPUがバイナリ互換でないと駄目です。

>自分のPCにUbuntu Linuxがインストールされていたので、こちらでHello worldのプログラムを作ってgccコンパイルしてできた実行ファイルをBeagleBone Blackに移して、

「ARM CPUの乗ったPC」ですよね?
Intel CPUやAMDのCPUだった場合、できあがったバイナリはBeagleBone Blackでは動作しませんよ?

http://beagleboard.org/Products/BeagleBone+Black
>Processor: AM335x 1GHz ARM® Cortex-A8


file hello_a.out
とやったらどう出力されますかね?

CentOS5.xでの例。
[user@localhost ~]$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped
[user@localhost ~]$

「Intel 80386」とある通り、ARMじゃ動きません。


SheevaPlugにDebian 6.0.9の例
user@localhost:~$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
user@localhost:~$
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
PCのLinuxでコンパイルを行った実行ファイルを


file hello_a.out


このコマンドを行ったところ、次のように出てきました。


hello_a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x83e82685fc650120a21f7e7fa9c2123634daa72b, not stripped


この実行ファイルはBeagle Bone Blackでは動作できません。



それで、Beagle Bone Blackでソースコードをgccコンパイラでコンパイルしてできた実行ファイルでは



root@beaglebone:/home# file a.out
a.out: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped




このように出てきました。

この実行ファイルはBeagle Bone Blackボードで動作できました。


私はてっきりLinuxのコマンドプログラムなら、どのLinuxのPCのGCCでコンパイルしてできた実行ファイルはどこでも実行可能なのかなとか思ってました。


実行ファイル出力される際は、ビルドコンパイルしたそのPCのCPUのアセンブラ結果などによるということで、それごとにビルドが必要なのですね。


クロスコンパイラという言葉は聞いたことがあるのですが、それとかに関係あるのですね。勉強になります。

お礼日時:2014/04/20 18:14

>Intel CPUやAMDのCPUだった場合、できあがったバイナリはBeagleBone Blackでは動作しませんよ?



クロスコンパイルしている場合はその限りではありません。
# もちろん、クロスコンパイルでできあがったバイナリをホストで動かすことはできないでしょうけど。

クロスコンパイル環境+debパッケージ作成な環境構築、結構大変なのよねぇ。
# というか成功したこと無い。
# x86のDebian 7.xでARMのDebian 7.x向け作りたいんだけど……。


まぁ、クロスコンパイルとか知っていたらこんな質問が出ることもないと思われますが…。
    • good
    • 0

ソースがあるなら、なぜそれぞれコンパイルしないの?


関連ファイルを含めて、なぜパッケージにしないの?
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。


PCのLinuxでコンパイルしたものをBeagleBone Blackボードで動作させることはできないことがわかりました。

ソースコードファイルをBeagleBone Blackボードに移動してコンパイルをしたところ、起動することができました。


gccコンパイルは搭載しているCPUによってコンパイルが必要になることがあるんですね。

お礼日時:2014/04/20 18:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!