On AWS Ubuntu Server, I wrote C++ Hello, World program:
#include <iostream>
using namespace std;
int main(){
cout<<"Hello, World!"<<endl;
return 0;
}
And compiled it:
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
It seems that architecture x86-64 is the same each other. What is the problem here? Do I have to add more C++ flags?
Best Answer
The
-c
flag tellsg++
to compile your source code to object code, but stop short of linking it with the necessary libraries to create a standalone executable binary. Fromman gcc
:To create an executable program, simple run your command again without the
-c
flag:followed by
(the executable flag will be set by default - an explicit
chmod
should not be required).