2012-02-28 61 views
11

commanKTというファイルがあり、それをLinux端末で実行したいとします。誰かがこのファイルを実行するコマンドを与えることで助けてもらえますか?私は./commonRTを試してみましたが、私はエラーを取得しています:Linuxでバイナリファイルを実行するには

"bash: ./commonrt: cannot execute binary file" 

[[email protected] MainApp]$ ls -al commonKT 
-rwxrwxr-x. 1 sijith sijith 10314053 Feb 27 16:49 commonKT 
+1

実行可能ですか?コマンド 'file'を使用しよう – meteorgan

+4

問題が単に名前の上にミックスアップ(' commonrt'と 'commonKT')ではないと仮定すると、' file commonKT/bin/sh'のコマンドは何を言っていますか? 2つの異なるアーキテクチャー(おそらくARM用とIntel用の2つのアーキテクチャー)を提供しているなら、Intelマシン上でARMを実行することはできません。 –

+0

'file'を使うことに加えて、' ldd'を使うこともお勧めします。おそらくダイナミックリンカやいくつかのコア共有ライブラリが異なっていたり、紛失していたり​​しています... –

答えて

4

タイプミスではない場合は:-)、なぜあなたは./commonRT代わりの./commonKTを使用しています?

+0

でも '。/ commonrt'はすべて小文字です。 :) –

5

ボリュームは、noexecを搭載しています。

1

ファイルは、ハードウェアでは実行できないファイルタイプおよび/またはアーキテクチャであるか、または別の方法で特定のフォーマットを処理するフォールバックbinfmt_miscエントリもありません。決定するにはfile(1)を使用してください。

18

バイナリを実行するには、./binary_nameを使用します。

あなたがエラーを取得する場合:

bash: ./binary_name: cannot execute binary file

それはあなたが上のバイナリを実行しようとしているものとは異なるターゲットにしたツールチェーンを使用してコンパイルされたので、それができるでしょう。

たとえば、 'binary_name.c'をarm-none-linux-gnueabi-gccでコンパイルし、生成したバイナリをx86マシンで実行しようとすると、上記のエラーが発生します。シェルからのLinuxでバイナリまたは.RUNファイルを実行する

8

、ドットスラッシュ友人を使用

./binary_file_name 

し、それが原因で権限の言う失敗した場合、あなたは

それを実行する前にこれを試みることができます
chmod +x binary_file_name 
# then execute it 
./binary_file_name 

は、それはあなたの実行ホスト対ビルドホスト上の互換性のないアーキテクチャの設定で、あなたのバイナリをコンパイルしている可能性があり

2

に役立ちます願っています。 はあなたのビルドホスト上

g++ {all-your-build-flags-here} -Q -v --help=target 

を経由して対応ターゲットの設定を見ていただけますか?特に、変数COLLECT_GCC_OPTIONSは貴重なデバッグ情報を与えるかもしれません。次に、このようなCPU能力のビルドホスト上-msse4.2 [enabled]が、行方不明sse4_2フラグとの不一致を探してください

cat /proc/cpuinfo | grep -m1 flags 

を経由して、あなたの実行ホスト上のCPUの能力を見てみましょう。

これは役立たない場合は、出力と実行ホストの両方にldd commonKTの出力を提供してください。

+0

@クラクあなたは私にあなたの恩恵をくれたことを確認します、ありがとう!エラーの内容を教えてください。 – user1978011

2

これは@craqへの答えです:

I just compiled the file from C source and set it to be executable with chmod. There were no warning or error messages from gcc.

私はあなたが「実行可能に設定」しなければならなかったことを少し驚いている - 私のgccは常に実行可能フラグ自体を設定します。これは、私にはgccが最終的な実行可能ファイルであるとは思わなかったし、このシステムで実行可能であるとは期待していなかったことを示唆している。

$ gcc -c -o hello hello.c 
$ chmod +x hello 

を(hello.cは典型的な「Hello World」プログラムです。)しかし、私のエラーメッセージが少し異なっている:

は今、私はそうのように、単にオブジェクトファイルを作成しようとした

$ ./hello 
bash: ./hello: cannot execute binary file: Exec format error` 

一方、この方法は、fileコマンドの出力はあなたと同じです:

$ file hello 
hello: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped 

私が正しくコンパイルすると、その出力はずっと長くなります。

$ gcc -o hello hello.c 
$ file hello 
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=131bb123a67dd3089d23d5aaaa65a79c4c6a0ef7, not stripped 

私が言っていることは、あなたのコードをコンパイルしてリンクする方法と関係があると思われます。多分あなたはあなたがそれをどうやっていくのか光を当てることができますか?

0

先に指摘したように、タイプミスではない場合、32ビット未満で64ビットをコンパイルするなどの間違ったコンパイラオプションになる可能性があります。それはツールチェーンであってはなりません。その後

chmod a+x name_of_file.bin 

あなたがアクセス権のエラーが出た場合、あなたとあなたのアプリケーションを起動する必要がある場合があります

./name_of_file.bin 

を書き込むことによって、それを実行します。

1

hereから抽出された)私の作品の唯一の方法ルート権限:

sudo ./name_of_file.bin 
0

コンパイルオプション-cはコンパイルとアセンブリをコンパイルしますが、リンクは作成しません。

-1

バイナリファイルのフルパス。たとえば、/ home/vitaliy2034/binary_file_nameとなります。または ディレクティブ "./+binary_file_name"を使用してください。 UNIXシステムでは、ターミナル(シェル)を開くディレクトリへのフルパスを返します。 私はそれが助けてくれることを願っています。 私の英語のために申し訳ありません、

関連する問題