• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ubuntuで作ったアプリを他のLinuxで動作)

Ubuntuで作ったアプリを他のLinuxで動作させたい

このQ&Aのポイント
  • Ubuntu Linuxなどでgccのコンパイラを使用して作成したアプリケーションの実行ファイルを他のLinuxでも実行させることは可能でしょうか?
  • BeagleBone BlackというAngstrom Linuxの基板で作成したアプリケーションをUbuntuでコンパイルし、実行ファイルを移動して実行しようとしたがエラーが発生し、実行することができません。
  • 他のLinux環境でUbuntuで作成したアプリケーションを実行する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

ライブラリとか適合できれば動作するでしょう。 当たり前ですが、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:~$

techhouse
質問者

お礼

回答いただきありがとうございます。 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のアセンブラ結果などによるということで、それごとにビルドが必要なのですね。 クロスコンパイラという言葉は聞いたことがあるのですが、それとかに関係あるのですね。勉強になります。

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

>Intel CPUやAMDのCPUだった場合、できあがったバイナリはBeagleBone Blackでは動作しませんよ? クロスコンパイルしている場合はその限りではありません。 # もちろん、クロスコンパイルでできあがったバイナリをホストで動かすことはできないでしょうけど。 クロスコンパイル環境+debパッケージ作成な環境構築、結構大変なのよねぇ。 # というか成功したこと無い。 # x86のDebian 7.xでARMのDebian 7.x向け作りたいんだけど……。 まぁ、クロスコンパイルとか知っていたらこんな質問が出ることもないと思われますが…。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

ソースがあるなら、なぜそれぞれコンパイルしないの? 関連ファイルを含めて、なぜパッケージにしないの?

techhouse
質問者

お礼

回答頂きありがとうございます。 PCのLinuxでコンパイルしたものをBeagleBone Blackボードで動作させることはできないことがわかりました。 ソースコードファイルをBeagleBone Blackボードに移動してコンパイルをしたところ、起動することができました。 gccコンパイルは搭載しているCPUによってコンパイルが必要になることがあるんですね。

関連するQ&A