我想在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)
-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).
| 归档时间: |
|
| 查看次数: |
1378 次 |
| 最近记录: |