Home Article gcc编译之--动态静态

gcc编译之--动态静态

Release time:2020-04-09 08:50:57 Author:一蓑烟雨 Reading volume:81

gcc编译之--动态静态

 

 

 

编译的步骤
1.预处理 : 处理所有以#开头的代码 头文件(展开) 宏定义(替换) 条件编译
gcc -E hello.c -o hello.i
2.编译 :把C代码转换成汇编代码 同时要进行语法检查
gcc -S hello.i -o hello.s
3.汇编: 把汇编代码转换成二进制
gcc -c hello.s -o hello.o
4.链接 :链接代码需要用到的库文件以及其他文件
gcc hello.o -o hello

文件编译过程
[root@jsetc 10.17]# gcc -E hello.c -o hello.i
[root@jsetc 10.17]# gcc -S hello.i -o hello.s
[root@jsetc 10.17]# gcc -c hello.s -o hello.o
[root@jsetc 10.17]# gcc hello.o -o hello
[root@jsetc 10.17]# ./hello
helloworld!

制作静态库
1.编写hello.c f1.c f2.c
vim hello.c f1.c f2.c
2.把f1.c f2.c 汇编处理,变成二进制文件
gcc -c f1.c f2.c
3.把二进制文件做成静态库
ar -crv libmy.a f1.o f2.o
4.编译hello.c文件
gcc hello.c -o hello -static -L . -l my

制作静态库

[root@jsetc lib]# gcc hello.c f1.c f2.c -o hello
[root@jsetc lib]# ls
f1.c f2.c hello hello.c
[root@jsetc lib]# gcc -c f1.c f2.c
[root@jsetc lib]# ar -crv libmy.a f1.o f2.o
a - f1.o
a - f2.o
[root@jsetc lib]# gcc hello.c -o hello -static -L . -l my
[root@jsetc lib]# ls
1.c 2.c f1.o f2.o hello hello.c libmy.a
[root@jsetc lib]# file 1.c
1.c: ASCII C program text
[root@jsetc lib]# file f1.o
f1.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

制作动态库
1. gcc -fPIC -shared f1.c f2.c -o libmy.so
2.编译源文件
gcc hello.c -o hello -L . -l my
3.运行可执行文件的时候会默认去/usr/lib/目录下找libxxx.so文件,所以需要把库文件拷到该目录下
cp libmy.so /usr/lib

制作动态库
root@jsetc lib]# gcc -fPIC -shared f1.c f2.c -o libmy.so
[root@jsetc lib]# gcc hello.c -o hello -L . -l my
[root@jsetc lib]# cp libmy.so /usr/lib
[root@jsetc lib]# ./hello
this is f1..
this is f2..

 

支付宝打赏 微信打赏
  
I want to comment

Search

classification

Leave a message
http://blog.rjxj513.com/
User login
You have not written any reviews yet!
You have commented!
Can only praise once!
You have a collection!