linux|C,C++程序的编译链接

在系统内核里每一个进程都有一个pcb节点,用于记录进程的属性信息

gcc和g++的区别?

gcc 个g++同时可以编译c和c++
但是他们编译的规则不同:
gcc对.c 文件以c语言的方式编译,对.cpp 文件以c++的方式编译
g++对.c 和.cpp 都以c++的方式编译
gcc默认链接C语言库,g++默认链接c++库

gcc的使用

直接将源文件编译成可执行文件
gcc  所有的源文件名  ---->默认生成a.o的可执行文件
gcc  所有源文件名  -o  用户自定义文件名            ---->生成用户定义的文件

分步完成:
预编译   gcc -E main.c -o main.i
编译    gcc -S main.i ---->main.s
汇编     gcc -c main.s -----> main.o()可重定位二进制目标文件)
链接     gcc 所有的中间文件 -o main

预编译 处理预处理命令 展开宏定义 删除注释
编译 词法分析 语法分析 语义分析 符号汇总
汇编 把编译阶段产生的汇编代码翻译成二进制文件,生成符号表
在C 程序中,会生成符号的有:函数 数据(全局和静态)
全局符号和局部符号(static)
有static修饰的会生成局部符号,static延长了变量的声明周期

gdb调试:

debug 版本 调试版本
gcc生成debug的可执行文件,在编译阶段加入-g选项
release版本 发行版本

gdb debug版本的可执行文件

list filename:num 显示执行文件的源码
l 默认显示main方法所在的文件的源码

b 行号 给指定行添加断点
b 函数名 给指定函数的第一行添加一个断点
b filename:行号 给指定文件的指定行添加一个断点

info b 查看断点信息

d 断点号 删除一个断点

r 启动运行
n 执行下一行 逐过程
s 执行下一句 逐语句

遇到函数调用时,s 会进入到函数中一句一句执行 n会直接将函数调用完成,执行下一行

finish 退出当前函数

c 继续执行,直到遇到下一个断点或者进程结束

q 结束调试

p valname 查看变量的值
p &valname 查看变量的地址
p 数组名 查看数组所有的元素
p *数组指针 @数组长度 显示所有数组的元素

bt 显示函数调用栈
display valname 每执行一行,之前设置的display都会显示一次

gdb set follow-fork-mode mode
mode 可以选择父进程或者子进程,选择调试那个进程,未被跟踪调试的进程会直接执行结束

makfile文件和make命令

makfile文件:定义编译程序的规则
完成自动化编译 提高效率
逆序方式
生成文件:依赖文件
tab 生成方式

main:main.o
     gcc -o  main main.o
 main.o:main.c
 	gcc -c main.c

库文件

共享库.so
在代码连接时,只是给了一个标记,在程序执行时,由操作系统单独加载共享库来执行
将需要打包的功能模块的代码直接编译生成共享库
生成: gcc -shared -fPIC -o libxxxxxx.so 功能模块的所有源码文件
使用:编译时 gcc -o mian main.c -L 库的路径 -l 库的名称
执行时 ./main 通过设置LD_ LIBRARY_PATH 环境变量来指定操作系统加载库的路径

静态库 .a
在连接时,将静态库中的内容合并到最终的可执行文件中
生成 : 将所有功能模块的源码编译成中间文件
ar crv libxxxxxx.a 功能模块源码生成的中间文件
gcc -o main main.c -L库的路径 -l 库的名称

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值