例程makefile详解

编译文件中原命令如下:
    gcc -Wall -g -fpic -shared -o libiptraces.so iptraces.c
    gcc -Wall -g -o p.out -I. -L. -liptraces nsprint.c

makefile关系到整个工程的编译规则,makefile定义了一系列的规则来制定,哪些文件需要先编译,
哪些文件后编译,甚至于进行更复杂的功能操作,同时好处是——“自动化编译”

MakeFlie编写规范:
    目标:依赖文件                               
    $^  代表所有依赖文件
    $@  代表所有目标文件
    $<  代表第一个依赖文件
    %   代表通配符
    @指令:屏蔽指令
    定义变量(变量大写)
    变量名=值1 值2 ...
    使用变量 $(变量名)

gcc是linux下面的编译器,分为预处理->编译->汇编->链接
gcc选项如下:
    -o 输出可执行文件
    -c 编译生成目标文件
    -g 输出调试信息
    -O2 编译器优化级别 1-3
    -Wall 警告选项 输出警告信息
    -l 紧接着链接库 lpthread
    -L 指定链接库的路径
    -I 头文件路径
    -shared 编译成动态链接库
    -fPIC:-fPIC作用于编译阶段,告诉编译器产生与位置无关代码
        (Position-Independent Code),则产生的代码中,没有绝对地址,
        全部使用相对地址,故而代码可以被加载器加载到内存的任意 位置,
        都可以正确的执行。这正是共享库所要求的,共享库被加载时,
        在内存的位置不是固定的。

so其实就是shared object的意思
1.so文件是什么? 
也是ELF格式文件,共享库(动态库),类似于DLL。
2.怎么生成以及使用一个so动态库文件? 
编译:得到输出文件libs.o 
gcc -fPIC -g -c s.c -o libs.o
链接:得到输出文件libs.so 
gcc -g -shared -Wl,-soname,libs.so -o libs.so libs.o -lc 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值