Исполнительная ошибка формата gcc-скомпилированных Привет Мировой C++

На Сервере 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++?

6
задан 5 November 2019 в 16:13

1 ответ

-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 не должен требоваться).

11
ответ дан 23 November 2019 в 07:28

Другие вопросы по тегам:

Похожие вопросы: