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
このようなエラーがでて実行することができません。
どなたかご教授頂きますよう、お願い致します。
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:~$
回答いただきありがとうございます。
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のアセンブラ結果などによるということで、それごとにビルドが必要なのですね。
クロスコンパイラという言葉は聞いたことがあるのですが、それとかに関係あるのですね。勉強になります。
No.3
- 回答日時:
>Intel CPUやAMDのCPUだった場合、できあがったバイナリはBeagleBone Blackでは動作しませんよ?
クロスコンパイルしている場合はその限りではありません。
# もちろん、クロスコンパイルでできあがったバイナリをホストで動かすことはできないでしょうけど。
クロスコンパイル環境+debパッケージ作成な環境構築、結構大変なのよねぇ。
# というか成功したこと無い。
# x86のDebian 7.xでARMのDebian 7.x向け作りたいんだけど……。
まぁ、クロスコンパイルとか知っていたらこんな質問が出ることもないと思われますが…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux ubuntuのサーバー(virtual box)が、再起動するとデータが消えてしまいます。 4 2022/04/27 21:29
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- UNIX・Linux ファイル・フォルダーの削除方法 2 2022/05/19 14:04
- Windows 10 外部ドライブにマウントできない問題について 9 2022/03/22 18:08
- UNIX・Linux Linux Ubuntu22.4の起動時エラーについて 2 2022/07/22 14:52
- UNIX・Linux ubuntuで デイスク/deb/loopというドライブが出るがこれは何? 4 2023/06/04 16:52
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- C言語・C++・C# linux C言語について ./ファイル名 入力値 入力値が表示 という風に実行と入力を同時にしたい 3 2022/10/17 16:57
- 画像編集・動画編集・音楽編集 動画編集ソフト 0 2022/08/29 14:34
- UNIX・Linux Ubuntuのアプリ版?が起動しません 1 2022/04/29 16:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アプリケーションのDLLファイル...
-
<unistd.h>をVisualStudioでつ...
-
すべてのリビルド: 0 正常、 0 ...
-
コンパイル失敗と表示されまし...
-
ビープ音が鳴りません・・・
-
[COBOL] ソースの復帰
-
c言語です コンパイルした時に...
-
VC++6.0の混在モード
-
ヘッダーファイル『windows.h』...
-
math.hに含まれる関数が使えない
-
Delphiでクラスをオブジェクト...
-
64ビットのlinuxで32ビットメモ...
-
共有ライブラリの内容確認について
-
同じEXE・同じファイルで解析結...
-
C言語で作ったらWindowsでもMac...
-
C90とC99の計算結果の違い?
-
fatal error LNK1112
-
C言語のグローバル変数の初期...
-
HEWの警告のことについて
-
libsshのコンパイルエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
math.hに含まれる関数が使えない
-
実行後にコンパイルに失敗しま...
-
c言語です コンパイルした時に...
-
ビープ音が鳴りません・・・
-
共有ライブラリの内容確認について
-
C言語をコンパイルするとコンピ...
-
すべてのリビルド: 0 正常、 0 ...
-
Verilog_HDLでのdefineとifdef
-
C#で char型とstring型の比較で...
-
64ビットのlinuxで32ビットメモ...
-
gcc コンパイル killed
-
#If True Then の # って何??
-
プレコンパイルの意味を教えて...
-
[COBOL] ソースの復帰
-
<math.h>ヘッダを入力している...
-
C言語で作ったらWindowsでもMac...
-
ヘッダーファイル『windows.h』...
-
define文のパラメータを実行時...
おすすめ情報