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