我在使用c ++时非常困难。 我创建了一个hello world,编译成了YouTube.exe和main.o. 我运行该程序并打印hello world,但随后说YouTube.exe已停止工作。 即使我将main.o移动到另一个目录,YouTube.exe仍会打印hello world并停止工作! 所以我有两个问题: 1.当main.o被删除时,为什么程序仍会打印hello world? 2.为什么程序停止工作?这是代码:
main.cpp:
#include<iostream>
using namespace std;
int main(){
int a;
cout << "Hello World!";
cin >> a; //to make the program pause
return 0;
}
答案 0 :(得分:2)
因为.o文件是包含程序的object file,但它仍然要链接并重新定位到真正的可执行二进制文件。
这意味着YouTube.exe
已经包含main.o
内的内容,但是采用可执行格式。
实际发生的是编译器生成 .o 文件(自己编译的每个目标文件),然后链接器将所有 .o 文件链接在一起,解决任何问题依赖并重新定位生成真正的 .exe 文件所需的内容。