[C++] 分离式编译

了解分离式编译,首先要明白一个程序的执行过程

Step 1.预处理

将.cpp源文件,一开始只是一个文本文件,通过预处理器,读取文件中的.h文件,形成一个 .i 的文本文件。

Step 2.编译器

将 .i 的文本文件通过编译器,编译为汇编程序.s。

Step 3.汇编器

执行.s汇编程序,形成包含对象代码的.obj对象文件

Step 4.链接器

再通过链接器,把.obj对象文件和一些库文件链接起来,生成 .exe 可执行文件。

总体来说就是:高级语言(.cpp文件)  到  汇编语言(.s文件)   到   机器语言(.o文件)   的过程。

分离式编译

分离式编译:把一个大的程序分割到几个文件里,每个文件独立编译,再把各个文件链接起来。

test.h

#include<iostream>

void test();

test.cpp

#include"test.h"

void test()  
{
	std::cout << "这是一个测试" << std::endl;
}

testmain.cpp

#include<iostream>
#include"test.h"

int main()
{
	test(); // 分离式编译
}

test.h里申明一个函数,test.cpp里定义这个函数,testmain.cpp里调用这个函数。

这个将申明、定义、调用分开的编译,就是分离式编译。

分离式编译的过程:首先会将每个.cpp文件进行独立编译,过程如同上述所说的一样,不同的是,编译器会在链接阶段,把每个文件的.obj对象文件和库文件链接在一起,形成一个可执行文件。

在使用VSCode进行分离式编译时,你可能会遇到一些错误信息,比如"Undefined symbols for architecture x86_64"或者"ld: symbol(s) not found for architecture x86_64"。这些错误通常是由于多个cpp文件没有同时编译导致的。为了解决这个问题,你可以按照以下步骤进行操作。 首先,你需要修改launch.json文件中的配置。在"configurations"中找到你使用的编译器配置,比如MinGW,然后将"compilerPath"项修改为你电脑上安装的MinGW中的g++编译器的路径。这样VSCode就能正确地找到编译器了。 其次,你还需要在launch.json文件中添加一个"编译"的配置。你可以在"configurations"中添加一个新的配置,然后将其命名为"编译"。在这个配置中,你需要设置"request"为"launch","program"为"cmd","args"为\["/C"\],"cwd"为"${workspaceFolder}"。这样VSCode就能正确地执行编译操作了。 最后,保存并关闭launch.json文件。现在你应该能够使用VSCode进行分离式编译了。 希望这些信息对你有帮助!如果你还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* [MAC vscode 编译多个文件失败(已解决)](https://blog.youkuaiyun.com/weixin_42618420/article/details/126643780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Vscode 配置C++环境(头文件,源文件分离)](https://blog.youkuaiyun.com/m0_60346726/article/details/124062653)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C++(28)-windows-VSCODE+C++执行和编译分开](https://blog.youkuaiyun.com/aggie4628/article/details/110390423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值