设为首页 加入收藏

TOP

Program library 使用Linux共享函数库
2014-11-24 03:29:30 来源: 作者: 【 】 浏览:0
Tags:Program library 使用 Linux 共享 函数

这两天费了好多时间在生成和使用linux的共享函数库上,按照David Wheeler的文章"Program Library HOWTO"上面一个共享函数库的脚本例子,在fedaro 13上总是提示找不到函数库。


这个例子的任务是,写好函数文件libhello.c,libhello.h,主函数文件demo_use.c,把libhello.c生成共享函数库,用这个共享函数库和demo_use.c生成demo_use可执行文件。用shell脚本文件实现。


先写好三个函数


文件libhello.c:


#-------------------------------------------------------------#


/*filename:libhello.c*/


#include


void hello(void)


{


printf("Hello,library world.\n");


}


#-------------------------------------------------------------#


文件libhello.h:


#-------------------------------------------------------------#


/*filename:libhello.h*/


void hello(void);


#-------------------------------------------------------------#


文件demo_use.c:


#-------------------------------------------------------------#


/*filename:demo_use.c*/


#include "libhello.h"


int main(void)


{


hello();


return 0;


}


#-------------------------------------------------------------#


我copy的第一个版本script_shared


#-------------------------------------------------------------#


#!bin/sh


#filename:script_shared


gcc -fPIC -Wall -g -c libhello.c


gcc -g -shared -W1,-soname,libhello.so.0 -o libhello.so.0.0 libhello.o -lc


/sbin/ldconfig -n .


ln -sf libhello.so.0 libhello.so


gcc -Wall -g -c demo_use.c -o demo_use.o


gcc -g -o demo_use demo_use.o -L. -lhello


./demo_use


#-------------------------------------------------------------#


运行后发现libhello.so.0没有,原来错在生成libhello.so.0这一句的gcc选项-Wl写成了-W1。此时对gcc -W1未能深究。


我的第二个版本script_shared


#-------------------------------------------------------------#


#!bin/sh


#filename:script_shared


gcc -fPIC -Wall -g -c libhello.c


gcc -g -shared -Wl,-soname,libhello.so.0 -o libhello.so.0.0 libhello.o -lc


/sbin/ldconfig -n .


ln -sf libhello.so.0 libhello.so


gcc -Wall -g -c demo_use.c -o demo_use.o


gcc -g -o demo_use demo_use.o -L. -lhello


./demo_use


#-------------------------------------------------------------#


运行后libhello.so.0,libhello.so的链接都是对的,但提示libhello.so.0找不到,重试了n遍,尝试libhello.so.0,libhello.so.0.0搬到/usr/local/lib/下,还是提示找不到函数库。此时对/sbin/ldconfig -n .这一句还是不太清楚作用,对整个流程没有从思路上去理一遍。


就这样费了一个下午之后,终于看到"./demo_use“前少写了一句设置环境变量LD_LABRARY_PATH的。


我的第三个版本script_shared


#-------------------------------------------------------------#


#!bin/sh


#filename:script_shared


gcc -fPIC -Wall -g -c libhello.c


gcc -g -shared -Wl,-soname,libhello.so.0 -o libhello.so.0.0 libhello.o -lc


/sbin/ldconfig -n .


ln -sf libhello.so.0 libhello.so


gcc -Wall -g -c demo_use.c -o demo_use.o


gcc -g -o demo_use demo_use.o -L. -lhello


using LD_LABRARY_PATH.LD_LABRARY_PATH="."


./demo_use


#-------------------------------------------------------------#


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux函数库操作相关 下一篇Android Java获取当前时间的总结

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)