Je sais qu'il y a beaucoup de questions similaires avec ce message d'erreur ici. Mais je ne trouve pas encore de solution.
Sur le serveur AWS Ubuntu, j’ai écrit c ++ Hello, programme mondial
#include <iostream>
using namespace std;
int main(){
cout<<"Hello, World!"<<endl;
return 0;
}
et compilé:
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
Il semble que l'architecture x86-64 soit la même. Quel est le problème ici? Dois-je ajouter plus de drapeaux c ++?
L'indicateur -c
indique à g++
de compiler votre code source en code objet, mais évitez de le lier aux bibliothèques nécessaires pour créer un binaire exécutable autonome. 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.
Pour créer un programme exécutable, exécutez simplement votre commande à nouveau sans l'indicateur -c
:
g++ test.cc -o out
suivi par
./out
(l'indicateur de l'exécutable sera défini par défaut - un chmod
explicite ne devrait pas être requis).