web-dev-qa-db-ja.com

gccでコンパイルされたHello World c ++の実行形式エラー

このエラーメッセージには、同様の質問が多数あります。しかし、まだ解決策が見つかりません。

AWS Ubuntuサーバーで、C++ Hello、Worldプログラムを作成しました

#include <iostream>
using namespace std;

int main(){
        cout<<"Hello, World!"<<endl;
        return 0;
}

コンパイル済み:

ubuntu@ip-xxxxx:~/dev/c++$ g++ -c ./test.cc -o out
ubuntu@ip-xxxxx:~/dev/c++$ chmod a+x out
ubuntu@ip-xxxxx:~/dev/c++$ ./out
-bash: ./out: cannot execute binary file: Exec format error
ubuntu@ip-xxxxx:~/dev/c++$ file ./out
./out: ELF 64-bit LSB  relocatable, x86-64, version 1 (SYSV), not stripped
ubuntu@ip-xxxxx:~/dev/c++$ uname -a
Linux ip-xxxxx 3.13.0-48-generic #80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ip-xxxxx:~/dev/c++$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4

アーキテクチャx86-64は互いに同じようです。ここで問題は何ですか? c ++フラグをさらに追加する必要がありますか?

5
Daebarkee

-cフラグは、ソースコードをオブジェクトコードにコンパイルするようにg++に指示しますが、スタンドアロンの実行可能バイナリを作成するために必要なライブラリとリンクする前に停止します。 man gccから:

   -c  Compile or assemble the source files, but do not link.  The linking
       stage simply is not done.  The ultimate output is in the form of an
       object file for each source file.

実行可能プログラムを作成するには、コマンドを再度実行しますwithout-cフラグ:

g++ test.cc -o out

に続く

./out

(実行可能フラグはデフォルトで設定されます-明示的なchmodは必要ありません)。

10
steeldriver