C++常用的库有哪些,标准库哪些是系统自带的,标准库有什么版本,如何确定安装了标准库,如何安装和升级标准库,如何安装卸载这些库?

本文详细讲解了C++程序从预处理、编译器、汇编到链接阶段的过程,强调语法检查与依赖库的重要性,以实例说明链接错误的常见原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们编写程序时候,会经过 预处理、编译器、汇编器、连接器 阶段

预处理:gcc -E main.c -o main.i  //引入头文件

编译器:gcc -S main.c -o main.s //引入头文件的值

汇编器:gcc -c main.c -o main.o //生成汇编语言

连接器:gcc main.c -o main

前三个阶段只对程序语法的判断,也就是说程序只要没有语法错误都会到到第三个阶段,只有在连接的时候,没有找到对应的库而报错。

举个例子:

Wang.h

Void wang(char *s);

Main.c

#include <stdio.h>
Void main()
{
	Wang("test");
	Printf("hello");
}

尽管我们只在main头文件中引入了头文件,而没有实现wang.c文件,也没有提供对应的wang.a /wang.so 库文件,程序依然能够运行到第三步,因为知识语法检测,同时也是我们经常调取第三方接口时,需要对方提供库文件与头文件的原因。

book@ubuntu:~/test_qt_whail/test1$ vim main.c
book@ubuntu:~/test_qt_whail/test1$ ls
main.c wang.h
book@ubuntu:~/test_qt_whail/test1$ gcc -E main.c -o main.i
book@ubuntu:~/test_qt_whail/test1$ ls
main.c  main.i  wang.h
book@ubuntu:~/test_qt_whail/test1$ gcc -S main.c -o main.s
book@ubuntu:~/test_qt_whail/test1$ ls
main.c  main.i  main.s  wang.h
book@ubuntu:~/test_qt_whail/test1$ gcc -c main.c -o main.o
book@ubuntu:~/test_qt_whail/test1$ ls
main.c  main.i  main.o  main.s  wang.h
book@ubuntu:~/test_qt_whail/test1$ gcc main.c -o main
/tmp/ccXbYC4r.o:在函数‘main’中:
main.c:(.text+0xc):对‘wang’未定义的引用
collect2: error: ld returned 1 exit status

我们在程序中使用C++库的时候也是一样的,需要引入头文件,也需要有头文件对应的库,

头文件一般会在/usr/local/include/、/usr/include/c++下,可以通过whereis include查看

库文件一般存放在/user/bin/下,当程序运行时,会动态链接这里的库文件,

如果交叉编译,需要查看工具链是否支持c++11或者其他版本,工具链如果能编译成功,说明工具链中的库文件都会存在,生成的执行文件也会在  提供工具链的系统中运行,因为工具链就是通过系统源码编译而来的。

所以在嵌入式程序系统中基本不会发现没有c++库的情况,因为我们常用的c++库stl、boost都已经包含在交叉工具链中,我们只需要注意提供的这些库是哪个版本而已,

对于开发者来说 如果工具链中没有提供c++的第三方库,硬件厂家也没有提供库,那么这个库只能放弃了。如果有源码的情况可以通过交叉工具链生成对应的库再使用,常见的有opencv等三方库都是这样做来的。

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值