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.\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

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

相关推荐