在linux下编译c ++程序

Xin*_*nus 0 c++ linux g++

我想在linux下编译简单的程序.这些是我执行的一组操作.

[mypc@localhost programs]$ vim heap.cpp
[mypc@localhost programs]$ g++ -c heap.cpp 
[mypc@localhost programs]$ chmod 777 heap.*
[mypc@localhost programs]$ g++ -c heap.cpp 
[mypc@localhost programs]$ ./heap.o
bash: ./heap.o: Permission denied
[mypc@localhost programs]$ ls
heap.cpp  heap.o
[mypc@localhost programs]$ ls -l
total 8
-rwxrwxrwx. 1 mypc mypc   67 2009-12-28 12:01 heap.cpp
-rw-rw-r--. 1 mypc mypc 1548 2009-12-28 12:02 heap.o
[mypc@localhost programs]$ chmod 777 heap.o
[mypc@localhost programs]$ ./heap.o
bash: ./heap.o: cannot execute binary file
[mypc@localhost programs]$ 
Run Code Online (Sandbox Code Playgroud)

这有什么错误?

这是一个程序

#include<iostream>

using namespace std;
int main(){

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

R S*_*hko 9

-c选项告诉编译器生成目标文件,而不是最终的二进制文件.您仍然需要链接您的代码.

如果您只有一个文件,则可以在一个步骤中进行编译和链接:

g++ heap.cpp -o heap
Run Code Online (Sandbox Code Playgroud)

当你进入更大的程序时,你会想要将编译与链接分开.假设您要在heap.cpp和main.cpp之间拆分代码.首先,您将进行编译步骤,然后将它们链接在一起:

g++ -c heap.cpp
g++ -c main.cpp
g++ -o program_name heap.o main.o
Run Code Online (Sandbox Code Playgroud)

最后,默认情况下,链接步骤会创建一个名为a.out的文件.如果你想这样指定名称,请确保使用-o选项(编译时不需要,因为默认情况下将NAME.EXTENSION转换为NAME.o).