LIUNX系统编程:动态库的制作

目录

1.将add.c和sub.c编译形成.o文件

2.讲add.o和sub.o打包成库

3.Makefile

4.细节问题

5.解决办法

1.直接将自己的库拷贝到库中

2.更改动态库辅助查找的环境变量

3. 在lib64中建立一个软连接


1.将add.c和sub.c编译形成.o文件

gcc -c -fPIC add.c sub.c// fPIC生成位置无关码

2.讲add.o和sub.o打包成库

这里打包使用的不是ar命令,还是gcc命令

gcc -shared add.o sub.o -o libmymath.so

这样动态库就制作完了,还是需要对这个库进行一些包装,让库更规范一下。

3.Makefile

libmymath.so:add.o sub.o
    gcc -shared -o $@ $^
%.o:%.c
    gcc -c -fPIC $< //$<:把依赖文件一个一个拿过来执行,有几个依赖文件执行几次

.PHONY:clean
 clean:
     rm -rf add.o sub.o libmymath.so mylib mylib.tgz
.PHONY:output
 output://发布一个库
     mkdir -p mylib/include                                                                                            
     mkdir -p mylib/lib
     cp ./*.h ./mylib/include
     cp ./*.so ./mylib/lib
     tar czf mylib.tgz mylib

这是Makefile整理完的库

4.细节问题

我们将库打包好后,重新编译编译main

因为#include""的搜索规则是,在当前目录下寻找,找不到再去/usr/include中寻找头文件,但是我们的头文件在/mylib/inclue中,所以在编译的时候要指明我们的路径。

gcc -o main main.c -I ./mylib/include -L ./mylib/lib -lmymath

虽然编译好了但是运行main会报错

这个时候因为因为只在main编译的时候我们告诉编译器,这个库的位置,才得以编译通过。

但是我们并没有告诉操作系统,这个库的位置,所以在运行的时候,操作系统找不到这个共享库的位置。

使用ldd查看

的确是找不到mymath这个库。

5.解决办法

1.直接将自己的库拷贝到库中

把libmymath.so拷贝到/lib64目录下

把add.h sub.h拷贝到/usr/include目录下

这种方式只建议比较成熟的库我们可以这么做,自己写的就不要瞎搞了。

2.更改动态库辅助查找的环境变量

export LD_LIBRARY_PATH=LD_LIBRARY_PATH:./mylib/lib

3. 在lib64中建立一个软连接

ln -s /home/wys/code/mylib/libsoft/mylib/lib/libmymath.so /lib64/libmymath.so

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值