Erro de formato Exec de Hello World c ++ compilado pelo gcc

3

Eu sei que há muitas perguntas semelhantes com esta mensagem de erro aqui. Mas ainda não encontrei nenhuma solução.

No servidor ubuntu da AWS, eu escrevi o programa Hello, World do c ++

#include <iostream>
using namespace std;

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

e compilado:

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

Parece que a arquitetura x86-64 é a mesma. Qual é o problema aqui? Tenho que adicionar mais sinalizadores de c ++?

    
por Daebarkee 11.11.2015 / 17:08

1 resposta

8

O -c sinalizador diz a g++ para compilar seu código-fonte para o código-objeto, mas não precisa vinculá-lo às bibliotecas necessárias para criar um binário executável autônomo. De 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.

Para criar um programa executável, execute seu comando novamente sem o -c flag:

g++ test.cc -o out

seguido por

./out

(o sinalizador do executável será definido por padrão - um chmod explícito não deve ser necessário).

    
por steeldriver 11.11.2015 / 21:26