2、gcc使用、静态库、动态库的制作与使用(Linux基础)

gcc的工作流程:

1 预处理: cpp预处理器, 去掉注释, 展开头文件, 宏替换
	gcc -E test.c -o test.i
2 编译: gcc, 将源代码文件编译成汇编语言代码
	gcc -S test.i -o test.s
3 汇编: as, 将汇编语言代码编译成了二进制文件(目标代码)
	gcc -c test.s -o test.o
4 链接: ld, 链接test.c代码中调用的库函数
	gcc -o test test.o

静态库的制作:

1 将.c文件编译成.o文件
	gcc -c fun1.c fun2.c
2 使用ar命令将.o文件打包成.a文件
	ar rcs libtest1.a fun1.o fun2.o

静态库的使用:

1 main.c与head.h和libtest1.a在同一级目录的情况
	gcc -o main1 main.c -I./ -L./ -ltest1
2 main.c与head.h和libtest1.a在不同一级目录的情况
	gcc -o main1 main.c -I./include -L./lib -ltest1

动态库的制作:

1 将.c文件编译成.o文件
	gcc -fpic -c fun1.c fun2.c
2 使用gcc将.o文件编译成库文件
	gcc -shared fun1.o fun2.o -o libtest2.so

动态库的使用:

gcc -o main2 main.c -I./include -L./lib -ltest2

动态库文件在编译的时候, 连接器需要使用参数-L找到库文件所在的路径;
在执行的时候, 是加载器ldd根据动态库的路径进行加载的, 与编译的时候用的-L
指定的路径无关.

最常用的解决办法:将LD_LIBRARY_PATH环境变量加到用户级别的配置文件~/.bashrc中,
然后生效(. ~/.bashrc source ~/.bashrc 退出终端然后再登录)

如何让系统找到共享库:

方法一:(了解)拷贝自己制作的共享库到/lib或者/usr/lib
临时设置LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径

方法二:(掌握)永久设置, 把export LD_LIBRARY_PATH=$ LD_LIBRARY_PATH:库路径, 设置到∼/.bashrc文件中, 然后在执行下列三种办法之一:
1、执行. ~/.bashrc使配置文件生效(第一个.后面有一个空格)
2、执行source ~/.bashrc配置文件生效
3、退出当前终端, 然后再次登陆也可以使配置文件生效

方法三:(了解)永久设置,把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径,设置到/etc/profile文件中
将其添加到 /etc/ld.so.cache文件中
编辑/etc/ld.so.conf文件, 加入库文件所在目录的路径
运行sudo ldconfig -v, 该命令会重建/etc/ld.so.cache文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值