首页 / 操作系统 / Linux / 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 <stdio.h>void hello(void){ printf("Hello,library world.
"); }#-------------------------------------------------------------#文件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#-------------------------------------------------------------#