Linux 中静态库和动态库的制作和使用

例如:在当前文件夹下有 test1.c  test2.c test3.c  test.h 文件。

一、静态库的制作和使用

1、首先将所有需要打包成静态库的.c文件编译为二进制文件(*.o)。

命令:gcc *.o -c

2、将编译好的*.o文件打包。

命令:ar -r libptest.a *.o

3、使用。若有文件使用了这个静态库那么将要包含test.h头文件。如:使用静态库的文件为file.c。静态库放在当前目录的下一级目录aa里。

命令:gcc file.c -Laa -lptest -Iaa -o file.out

说明-L   后面写的是静态库文件的所在的路径。

       -l (小L)    后面写的是静态库文件的名字。(静态库文件的名字:libptest.a   。 lib为前缀    .a为后缀  中间的ptest就是静态库的名字)。

        -I (大i)    是将一个路径加到系统搜索路径下去。(include <test.h>不知道去哪儿搜索这个头文件。所以将test.h所在目录添加到当前系统搜索的路径下去)。

二、动态库的制作和使用

1、将需要添加到动态库里的文件编译为与位置无关的二进制文件(*.o)。-fPIC 参数  与位置无关。

命令:gcc -fPIC *.c -c

2、将第一步做好的与位置无关的二进制文件打包到动态库文件中。

命令:gcc -shared -o libptest.so *.o

3、使用。若有文件使用了这个动态库那么将要包含test.h头文件。如:使用动态库的文件为file.c。动态库放在当前目录的下一级目录aa里。

命令:gcc file.c -Laa -lptest -Iaa -o file.out

生成了一个file.out 可执行文件。

这时候执行file.out 会出现错误。错误原因:找不到libptest.so这个动态库文件。

可以执行命令ldd  file.out 查看file.out 需要依赖哪些动态库文件。

解决方法(两种):

1、将libptest.so这个动态库文件的目录添加到加载器搜索的环境变量里(LD_LIBRARY_PATH)。

命令:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:aa

再次执行file.out         ok成功。

2、将libptest.so这个动态库文件移动到 /lib 或者 /usr/lib下。

再次编译时就可以不用指定动态库的路径了。

命令:gcc file.c -lptest -Iaa

执行file.out      ok 成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值