牛客项目-第一章-编译链接学习笔记

源代码编译流程.png
gcc:编译c程序 g++:编译c++程序
gcc编译选项.png
gcc编译选项2.png

第一种
1)ls查看为test.c
2)linux终端编译c代码,gcc test.c -o app 然后ls为app test.c
3)运行./app 输出结果

第二种
1)gcc test.c为a.out app
2./a.out运行 输出结果

常用命令:

返回上一级目录:cd..
递归复制calc目录和 library目录到lesson05文件夹:cp -r calc/ library/ ../lesson05
查看当前目录有哪些文件:ls
批量删除:rm *.什么结尾的
清屏:clear:ctrl+L
拷贝calc下的libcalc.a文件到当前目录的lib文件夹下:cp ../calc/libcalc.a ./lib/

静态库在程序的链接阶段被复制到了程序中
动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用

##制作并使用静态库

1)gcc -c add.c div.c sub.c mult.c生成.o文件
2) ar rcs libcalc.a add.o div.o nult.o sub.o生成libcalc.a文件
3)将libcalc.a文件移动到lib目录下
4)gcc main.c -o app -I ./include/ -l calc -L./lib 生成app文件
5./app运行

##制作并使用动态库

1)gcc -c -fpic add.c div.c mult.c sub.c生成.o文件
2)gcc -shared add.o sub.o mult.o div.o -o libcalc.so生成libcalc.so文件
3) 将libcalc.so移动到lib目录下
3) gcc main.c -o main -I include/ -L lib/ -l calc生成main文件
4) 进入动态库路径之后pwd: /home/nowcoder/Linux/lesson06/library/lib
5) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nowcoder/Linux/lesson06/library/lib
6) echo $LD_LIBRARY_PATH输出查看
7)ldd main 查询动态库依赖有了没
8./main运行

上面是会话退出就失效了
用户级别长久配置home目录

1)vim .bashrc
2)export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nowcoder/Linux/lesson06/library/lib
3)source .bashrc

系统级别永久配置

1)sudo vim /etc/profile
2)同上
3)source /etc/profile

makefile设置C文件的执行顺序
makefile.png

vim下面set nu显示行号
vim下e更新数据

gcc test.c -o test -g
gdb可执行程序启动 q退出

break 16 if i=3条件断点
next不进函数体,step进函数体
display自动变量 

文件系统IO

标准C库:缓冲区减少与磁盘交互的次数,提升效率
Linux:没有缓冲区

程序:不占用内存空间,占用磁盘空间
进程:占用内存空间,运行的程序 

一个进程的开启,会对应一段虚拟地址空间,由MMU(内存管理单元)映射到物理空间中

软连接信息lstat:文件路径 ,stat文件本身信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值