Linux开发工具之编译器gcc/g++

文章目录

1.查看版本

gcc -v.

2.程序的翻译

3.gcc指令

3.1gcc hello.c -o hello

gcc hello.c -o hello.将名为hello.c的源代码文件编译为可执行文件hello。编译后的可执行文件可以通过运行./hello命令来执行。
gcc hello.c.将名为hello.c的源代码文件编译为可执行文件a.out。编译后的可执行文件可以通过运行./a.out命令来执行。

3.2gcc -E hello.c -o hello.i

-E: 进行程序编译 完成预处理后 停止编译

3.3gcc -S hello.c -o hello.s

-S: 从当前文件进行程序编译 完成编译阶段 停止编译

3.4gcc -c hello.c -o hello.o

-c: 从当前文件开始编译 完成汇编阶段 停止编译


3.5gcc hello.o -o hello


其余指令(了解)

-g 生成调试信息。GNU 调试器可利用该信息。

-shared 尽量使用动态库,生成文件较小[系统有动态库]

-O0/-O1/-O2/-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

-w 不生成任何警告信息。

-Wall 生成所有警告信息。

4.动静态库[详讲链接阶段]

4.1初步认识

链接方式:

  1. 动态链接--- 需要动态库
  2. 静态链接--- 需要静态库

头文件找声明 库里找实现 声明+实现+代码关联起来==>.exe



Linux: .so(动态库) .a(静态库)

Windows: .dll(动态库) .lib(静态库)

cpp 复制代码
一些指令也是c语言写的

4.2动态链接

将当前程序会访问到的方法/接口的地址记录在可执行程序中 建立关联

依赖那个动态库 动态库出现错误 当前程序也会出现错误 但是会节省资源

在学校有些无聊 想要出去上网 问了学长网吧在大北街 从学校翻墙出去到网吧 为了方便逃跑让网管开一台靠窗的机器 结束之后 回到学校继续进行之后的愿望清单

这实际上就是动态链接的过程 那些能在学校里完成的事情 就好比你写的for/while 而printf这种无法在学校完成的库函数需要按照学长的指示去目的地找动态库(网吧)完成 这一来一回就是动态链接

4.3静态链接

将库里面该接口/方法的实现 直接拷贝一份在可执行程序中

举例: 想要上网 不再按照学长的指示去校外 而是买了一台ps5 自己在寝室写完作业当要玩游戏时就可以直接玩

相对动态链接 更安全一些 动态库是否出现错误不影响当前程序 但是可能会重复占用资源(100个含printf的程序同时运行)

cpp 复制代码
我们的库在哪里呢?

云服务器下先下载

gcc/g++形成的可执行程序默认是动态链接的

ldd打印/查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。ldd不是一个可执行程序,而只是一个shell脚本

如何调用静态库?

gcc hello.c -o sthello -static.使用静态链接的方式形成可执行程序(大小是动态链接生成的可执行程序的十几/几十倍甚至更多)

相关推荐
网硕互联的小客服14 分钟前
如何解决 Linux 文件系统挂载失败的问题?
linux·服务器·前端·网络·chrome
门思科技20 分钟前
主流 LoRaWAN 网络服务器深度对比:ThinkLink、TTS、ChirpStack、Loriot 与 Actility 选型指南
运维·服务器·网络
大聪明-PLUS6 小时前
如何使用 Docker 打包一个简单的应用程序:简易指南
linux·嵌入式·arm·smarc
深耕AI7 小时前
【完整教程】宝塔面板FTP配置与FileZilla连接服务器
运维·服务器
serve the people7 小时前
Prompts for Chat Models in LangChain
java·linux·langchain
李昊哲小课8 小时前
Ubuntu 24.04 MariaDB 完整安装与配置文档
linux·ubuntu·mariadb
无聊的小坏坏8 小时前
从单 Reactor 线程池到 OneThreadOneLoop:高性能网络模型的演进
服务器·网络·一个线程一个事件循环
AI智域边界 - Alvin Cho9 小时前
Bloomberg、LSEG 与 MCP 缺口:为什么尚未发布完整的 MCP 服务器,以及多智能体系统如何解決这问题
运维·服务器
人间打气筒(Ada)9 小时前
zerotier内网穿透部署(rockylinux部署本地服务器)超详细~~~
linux·内网穿透·内网·公网·zerotier·穿透
Elias不吃糖10 小时前
Git常用指令合集
linux·git