GCC背后的故事

GCC背后的故事&OpenCV相识何必曾相逢

一、

gcc命令生成静态库和动态库

静态库:

1.库的生成

编写好main.c hello.c hello.h文件

hello.h

在这里插入图片描述

hello.c

在这里插入图片描述

main.c
在这里插入图片描述

2.将 hello.c 编译成.o 文件。gcc -c hello.c

运行ls命令查看
在这里插入图片描述

3.创建静态库

# ar -crv libmyhello.a hello.o

运行ls查看

在这里插入图片描述

4.运行静态库

# gcc -o hello main.c -L. –lmyhello
在这里插入图片描述

动态库

1.由.o 文件创建动态库文件。

# gcc -shared -fPIC -o libmyhello.so hello.o

ls命令查看

在这里插入图片描述

2.运行 gcc 命令生成目标文件

# gcc -o hello main.c -L. -lmyhello

3。我们将文件 libmyhello.so 复制到目录最后运行
在这里插入图片描述

静态库.a与.so库文件的生成与使用

1.创建A1.c A2.c A.h test.c

A1.c
在这里插入图片描述

A2.c

在这里插入图片描述

A.h
在这里插入图片描述

test.c

在这里插入图片描述

2.1静态库的生成和编译

生成静态库文件 ar crv libafile.a A1.o A2.o

编译生成程序gcc -o test test.c libafile.a

在这里插入图片描述

2.2动态库的生成和编译

生成对象文件 gcc -c -fpic A1.c A2.c

生成动态库.so文件 gcc -shared *.o -o libsofile.so

使用.so文件,创建可执行程序 gcc -o test test.c libsofile.so
在这里插入图片描述

此时报错,执行拷贝命令 sudo cp libsofile.so /usr/lib,最后编译
在这里插入图片描述

二、与第一次作业的结合

1.在前一次的文件基础上

增加sub2.c

在这里插入图片描述

sub2.h

在这里插入图片描述

2.静态库编译

生成.o的目标文件gcc -c sub1.c sub2.c

利用.o的目标文件,生成静态库文件 ar crv libsubfile.a sub1.o sub2.o
在这里插入图片描述

使用静态库文件libafile.a 编译生成程序gcc -o main1 main1.c libsubfile.a
在这里插入图片描述

使用size命令查看编译生成的目标大小
在这里插入图片描述

3.动态库编译

生成对象文件gcc -c -fpic sub1.c sub2.c`

生成动态库.so文件 gcc -shared *.o -o libsubfile.so`

使用.so文件,创建可执行程序gcc -o main2 main1.c libsubfile.so,执行./main2发现报错
在这里插入图片描述

执行拷贝命令sudo cp libsubfile.so /usr/lib,再次执行目标文件可以成功。
在这里插入图片描述

使用size命令查看目标文件大小
在这里插入图片描述

三、 Gcc不是一个人在战斗

1.准备工作

hell.c
在这里插入图片描述

2.简单编译

gcc hell.c -o hell

3.实际编译

(1)预编译

gcc -E hell.c -o hell.i

(2)编译为汇编代码

gcc -S hell.i -o hell.s

(3)汇编

gcc -c hell.s -o hell.o

(4)连接

gcc hell.o -o hello
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值