c语言生成库与链接运行

四个阶段:

  1. 预处理, 展开头文件/宏替换/去掉注释/条件编译 (cc.i cc.i)
  2. 编译, 检查语法,生成汇编 (cc.s cc.s)
  3. 汇编, 汇编代码转换机器码 (cc.o cc.o)
  4. 链接 链接到一起生成可执行程序 a.out

引用其他文件函数生成可执行文件过程:
cc.h 文件:


#if !defined(_CC_H_)
#define _CC_H_

int aa;
char* printchar();

#endif // _CC_H_

cc.c 文件:

#include <stdio.h>

int aa = 9;

char* printchar() {
    printf("print cahr");
    return "ret prin char";
}

main.c 文件:

#include <stdio.h>
#include "cc.h"

int main(){
    printf("ddd:%d\n",aa);
    char *s = printchar();
    // printf("ss:%s\n",s);
    // return 0;
}

生成cc.c目标文件 gcc -c cc.c 会生成 cc.o 即目标文件。运行gcc -o main main.c cc.o && ./main

生成静态库文件 ar -cvr -o libcc.a cc.c 生成libcc.a。运行 gcc -o main main.c libcc.a && ./main

生成动态库文件gcc -fPIC -shared -o libcc.so cc.c 生成libcc.so。
使用动态库gcc -o main main.c -L/xxx/…(libcc.so所在目录)… -lcc -Wl,-rpath=/xxx/…(libcc.so所在目录)…
指令说明:
-L[dir] 指定库文件所在目录。默认搜索目录/usr/lib /lib
-l[name] 旗标是小写L。指定使用库文件名称。库文件名称格式需要是lib$(name).so
-Wl, 后方字符串选项使用逗号(,)分割
-rpath 程序运行时加入库的目录地址。注:只加入-L不加-rpath能链接库生成执行文件,但是执行时就会找不到库文件。问题报错:error while loading shared libraries: libxx.so: cannot open shared object file: No such file or directory
-I 旗标是大写i。指定头文件目录。

如不使用-L与-rpath,可把库放入/usr/lib或者/lib中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值