На Сервере Ubuntu AWS я записал C++ Привет, Мировую программу:
#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++?
-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.
Создать исполняемую программу, простое выполнение Ваша команда снова без -c
флаг:
g++ test.cc -o out
сопровождаемый
./out
(исполняемый флаг будет установлен по умолчанию - явное chmod
не должен требоваться).