2016-11-07 9 views
3

私はLinux上で "バイナリ"ファイルを与えられ、特定のタスク用のウィンドウに対しては別のファイルが与えられました。プログラムはWindows上のexeです。 Linux版のファイルには、Windows版と同じ機能があります。Ubuntuでエクステンデッド(おそらくELF)ファイルを実行するにはどうすればよいですか?

しかし、私はこれを実行することができませんでした。私は(端末上で)ファイル名./[filename]でそれを実行しようとしましたが、さらにchmod +x [filename]を試してから2番目の方法を試みました。

すべての結果...「コマンドが見つかりません」という結果が表示されます。 (ファイルは間違いなくそこにあります)。

私は何をすべきですか?ファイルコマンドを実行すると、次のようになります。

ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e805f746e65c09cc8b0c037d8a8c27ee0a6a051c 
+0

LinuxでWindows用に使用したのと同じ実行ファイルを実行していますか? – Inian

+0

いいえ、先生...私は確かにそうではありません! – hexcode

+1

fileコマンドを使用すると、次のようになります。 ELF 32ビットLSB実行可能ファイル、Intel 80386、バージョン1(SYSV)、ダイナミックリンク、インタプリタ/lib/ld-linux.so.2、GNU/Linux 2.6.32、BuildID [ sha1] = e805f746e65c09cc8b0c037d8a8c27ee0a6a051c、striped – hexcode

答えて

4

これは64ビットシステムで32ビットコンパイルされていると思います。 gccの-m32オプションを使用して、小さなcファイルをバイナリにコンパイルしました。これにはさらにいくつかのパッケージが必要でした。その結果、a.outは次のようになります。

% file a.out 
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=be02470c8337b96e7deaaff323bc53865991c3ab, not stripped 

a.outが私にこれを示して実行

% file /bin/ls 
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=a0823e17cafbe5b2296346216445566840fdfd88, stripped 

バイナリネイティブシステムにこれを比較してください。

% ./a.out 
zsh: no such file or directory: ./a.out 

特定の「コマンドが見つかりません」というメッセージは、私が思うに、bashが出力したものです。私は自分でzshを使います。

これを動作させるには、multilibパッケージをインストールします。私は正確なパッケージに絞っていませんでしたが、Debian上にgcc-multilibをインストールすると、必要なものすべてが取り込まれます。それをインストールした後、私が得たものがここにあります。

% ./a.out 
3.140523 

(プログラムはPIの値を推定することになっています)。

注:私は実際にファイルをコンパイルするためにgcc-multilibをインストールする必要がありました。私はその後、必要な32ビットランタイムライブラリを持たない64ビットシステムを模倣するようにパッケージをアンインストールしました。

関連する問題