在 AWS Ubuntu Server 上,我编写了 C++ Hello, World 程序:
#include <iostream>
using namespace std;
int main(){
cout<<"Hello, World!"<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并编译它:
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
Run Code Online (Sandbox Code Playgroud)
似乎架构 x86-64 彼此相同。这里有什么问题?我是否必须添加更多 C++ 标志?
ste*_*ver 18
该-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.
Run Code Online (Sandbox Code Playgroud)
要创建一个可执行程序,简单的再次运行命令没有的-c标志:
g++ test.cc -o out
Run Code Online (Sandbox Code Playgroud)
其次是
./out
Run Code Online (Sandbox Code Playgroud)
(默认情况下将设置可执行标志 -chmod不应要求显式)。