linux c 基础

14 篇文章 0 订阅

1.目录

系统软件:/usr/bin

管理添加新软件:/usr/local/bin

保留:/usr/local

C头文件:/usr/include

依赖linux头文件:/usr/include/sys    /usr/include/linux

库文件(预先编译好的函数集合): /lib    /usr/lib

静态库:libX.a  (档案archive 直接使用)  可以用ar命令建立。  缺点:每个程序一份拷贝。-->程序文件有拷贝,内存有拷贝。

共享库:libX.ao.N           X=名字  N=版本 


2.linux c 程序   

编辑vim 

编译gcc 

项目管理makefile (在里面调用gcc)

编译链接make 

调试跟踪gdb 


3.gcc编译器

2.1 编译过程 eg:    gcc  hello.c  -o hello

A 预处理:   展开宏;插入include语句内容    gcc  -E hello.c  -o hello.i

B 编译 : 调用ccl                                              

C 汇编 :as  ---》目标代码                             gcc -c hello.i -o hello.o

D 链接 :ld --》目标代码链接成一个可执行程序  gcc hello.o -o hello


tip -i  引入其他目录头文件

eg: gcc abc.c -i  /usr/abc/include       //gcc会从/usr/abc/include 与标准安装目录寻找  include ""

tip -i  引入其他目录库文件

eg: gcc abc..c -L /usr/xxx/lib  -lmarry    //gcc  会找 libmarry.so (- l选项)


tip 多用grep寻找函数、常量定义

eg: grep   TMP  *.h   //从当前目录的所有.h文件里面找TMP的行


tip:加速。 gcc编译过程有3份临时文件,使用-pipe管道可以舍弃临时文件,从而加速(大项目有用)

eg:gcc -pipe  abc.c -o abc

tip:程序记时: time ./abc


4.gdb 调试器 

gcc 生成调试信息:gcc -g test.c -o test

gdb test

待续


5.makefile 编译脚本

5.1:自动化编译,增量编译

hello.exe: main.o  a.o b.o

gcc -o hello.exe main.o a.o b.o

main.o:main.c a.h b.h

gcc -c main.c

a.o:a.c a.h

gcc -c a.c

b.o:b.c b.h

gcc -c b.c

clean:

rm main.o a.o b.o           #使用make clean 执行,后面实际上是shell


5.2变量:(依赖项多,或者可变性大时好用)

var = main.o a.o b.o

hello.exe:$(var)

gcc -o hello.exe $(var)

5.3自动推导:.c与 gcc-c

简化:

var = main.o a.o b.o

hello.exe:$(var)

gcc -o hello.exe $(var)

main.o: a.h b.h

a.o:a.h

b.o: b.h

clean:

rm hello.exe $(var)


#clean优化:

.PHONY:clean                     #.PHONY 说明后面的是伪目标(不会引起与其他文件同名问题)

clean:

-rm hello.exe $(var)    #-rm 不理睬rm异常


5.4 文件

make -f make.linux                #指定使用文件

include foo.make *.mk              #引用其他makefile          -include  没有引用成功也继续

VPATH= DIRA:DIRB                       #特殊变量,当前目录没就去VPATH找

vpath %.h DIRA:DIRB                       #顺序从DIRA,DIRB中找所有.h文件,注意这里通配符为%

5.5 执行步骤

A

1.读入所有makefile(命令,环境变量MAKEFILES(不推荐))

2.读入include mk

3.初始化变量

4.隐式规则

5为目标文件建立依赖关系链

B

6.根据5决定哪些目标要重新生成

7.执行



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值