源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

老生常谈C语言动态函数库的制作和使用(推荐)

  • 时间:2020-03-27 16:34 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:老生常谈C语言动态函数库的制作和使用(推荐)
>>>>>>[url=http://www.1sucai.cn/article/91304.htm][b]老生常谈C语言接静态函数库的制作和使用>>点击进入[/b][/url] [b]2 动态函数库的制作和使用[/b] 动态函数库的制作步骤可以用下图来描述,具体包括 [img]http://files.jb51.net/file_images/article/201608/201608261021087.png[/img] (1) 编写函数的.c文件(例如add.c、sub.c、mul.c和div.c) (2) 编写Makefile,然后make,实现函数的编译和归档入库 函数的编译:使用gcc –c add.c -fPIC只编译不链接函数.c文件,分别生成函数的目标文件(例如add.o、sub.o、mul.o和div.o)。 函数的归档入库:使用gcc -o libdynamic.so $(objects) -share将目标文件归档入库。 (3) 编写头文件(例如kud.h),声明函数库中所有函数,目的是kudmain.c函数#include头文件后,可以调用相应的函数,至此,完成函数库的制作 [b]2.1 动态函数库的制作示例[/b] 示例的内容建立动态函数库libdynamic.so,库中包括add、sub、mul和div函数,然后在kudmain.c函数中引用这4个函数,实现两个整数的加减乘除,整个文件的结构是 [img]http://files.jb51.net/file_images/article/201608/201608261021088.png[/img] (1) 编写函数的.c文件 采用制作静态函数库时的4个函数文件add.c、sub.c、mul.c和div.c,不做任何改动。 (2) 编写头文件 将制作静态函数库时的头文件名ku.h改为kud.h,其他内容不做任何改动。 (3) 编写Makefile 由于制作动态库的命令和制作静态库的命令存在差异,因此需要修改Makefile。
objects = add.o sub.o mul.o div.o

libdynamic.so : $(objects)
  gcc -o libdynamic.so $(objects) -shared

add.o : add.c
  gcc -c add.c -fPIC

sub.o : sub.c
  gcc -c sub.c -fPIC

mul.o : mul.c
  gcc -c mul.c -fPIC

div.o : div.c
  gcc -c div.c -fPIC

clean : 
  rm libdynamic.so $(objects)
(4) 使用make编译.c文件,生成.o文件,归档.o文件到函数库libdynamic.so中,完成动态函数库的制作。 [img]http://files.jb51.net/file_images/article/201608/201608261021089.png[/img] 2.2[b]动态函数库的使用[/b] (1)编写kudmain.c,调用libdynamic.so中的add、sub、mul和div函数
#include <stdio.h>
#include "kud.h" 

int main (void)
{
int a,b;
a = 10;
b = 3;
printf("a = %d.\nb = %d.\n",a,b);
printf("static a+b = %f.\n",add(a,b));
printf("static a-b = %f.\n",sub(a,b));
printf("static a*b = %f.\n",mul(a,b));
printf("static a/b = %f.\n",div(a,b));
return 0;
}
(2) 使用gcc kudmain.c –o kudmain.o –L ./ku2 –ldynamic 编译kudmain.c文件,运行./kudmain.o查看运行结果,结果出现ERROR,原因是程序运行load动态函数库时,找不到该函数库。 [img]http://files.jb51.net/file_images/article/201608/2016082610210810.png[/img] [b](3) 解决方法[/b] [b]方法1:[/b]将libdynamic.so放到/usr/lib目录下,执行cp kud2/libdynamic.so /usr/lib,然后运行./kudmain.o,程序运行正常,问题得到解决。 [img]http://files.jb51.net/file_images/article/201608/2016082610210811.png[/img] [b]方法2:[/b]使用环境变量LD_LIBRARY_PATH,程序运行load动态函数库时,会先在LD_LIBRARY_PATH指定的目录下查找函数库,找不到就再去/usr/lib下查找,执行export LD_LIBRARY_PATH=/mnt/hgfs/winshare/kud/kud2:$LD_LIBRARY_PATH,然后运行./kudmain.o,程序运行正常,问题得到解决。 [img]http://files.jb51.net/file_images/article/201608/2016082610210812.png[/img] [b]2.3 使用ldd命令查看依赖关系[/b] ldd命令是一个shell脚本,不是一个可执行程序,用于查看某个可执行程序含有什么动态函数库,也即该程序执行时依赖于哪些动态函数库。 $ldd kudmain.o //可见kudmain.o依赖于libdynamic.so [img]http://files.jb51.net/file_images/article/201608/2016082610210813.png[/img] 以上这篇老生常谈C语言动态函数库的制作和使用(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部