··· Linux下动态链接库(.so)

类比于windows下的dll,动态链接库特点是:不参与编译,只在程序运行时调用至内存。 注意:so一定要以lib开头,比如编译为:lib_xxxx.so,则调用时为:-l_xxxx(小写L,去掉lib头和so尾)

1.1 创建so

将./lib/src文件夹下的liba.c libb.c 文件编译成so:

$ gcc a.c  liba.c  libb.c  -fPIC  -shared   -o  lib_my.so

其中:-shared 指定生成动态链接库;-fPIC编译为位置独立的代码;
在这里插入图片描述在这里插入图片描述

1.2 引用so

将test.c和so一起链接成文件test

$ gcc  test.c   -o   main  -L. -l_my

其中:-L指定搜索路径;-l_my表示引用lib_my.so。注意,链接指令一定要在.c文件之后出现!!

$ gcc -o test -L. -lmylib test.c  #错误
$ gcc -o test -L. test.c -lmylib  #正确

在这里插入图片描述
在这里插入图片描述
测试是否正确链接:
在这里插入图片描述

1.3 可能遇到的问题

找不到so文件

确定-L指定搜索.so路径,确定-I指定搜索.h文件路径,ldd查看不到链接,则需要export LD_LIBRARY_PATH。
在这里插入图片描述

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/path
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐