これは@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
私が言っていることは、あなたのコードをコンパイルしてリンクする方法と関係があると思われます。多分あなたはあなたがそれをどうやっていくのか光を当てることができますか?
実行可能ですか?コマンド 'file'を使用しよう – meteorgan
問題が単に名前の上にミックスアップ(' commonrt'と 'commonKT')ではないと仮定すると、' file commonKT/bin/sh'のコマンドは何を言っていますか? 2つの異なるアーキテクチャー(おそらくARM用とIntel用の2つのアーキテクチャー)を提供しているなら、Intelマシン上でARMを実行することはできません。 –
'file'を使うことに加えて、' ldd'を使うこともお勧めします。おそらくダイナミックリンカやいくつかのコア共有ライブラリが異なっていたり、紛失していたりしています... –