在linux下创建并使用动态链接库的方法介绍

注明:我用的Linux系统版本为"Ubuntu 10.04.1 LTS"
在linux下创建并使用动态链接库的方法介绍
    1.首先我们要在主机上创建一个我们自己的函数库目录来保存我们的动态链接库
        文件~/library/lib
    2.然后我们必须要有自己的链接库的源码目录~/library/src
    3.我们以一个例子来说明如何创建并使用动态链接库
        两个源码文件libfruit.c和test.c,源码放在文章最后面,前者用于生
        成动态链接库libfruit.so,后者用于测试函数调用
       
        编译动态链接库的makefile为
all: libfruit.so install clean

libfruit.so:libfruit.o
        @echo "********************making dynamic linked library*************"
        cc -shared -o libfruit.so libfruit.o
libfruit.o:libfruit.c
        cc -fpic -c libfruit.c

install:
        @echo "*********************installing ......************************"
        mv ./libfruit.so ${LD_LIBRARY_PATH}
clean:
        @echo "*********************cleaning....*************************"
        rm -f ./libfruit.o ./libfruit.so

        makefile的格式我不多说,值得说明的一点是其中的LD_LIBRARY_PATH变量
        是需要在makefile外面设置的,可以手动执行
        export LD_LIBRARY_PATH=~/library/lib
        也可以将该行命令加到.profile中
       
        其中的-fpic选项用于编译生成与平台无关的代码.o文件,然后在ld链接器使用
        -shared选项生成共享链接库文件。
       
        接下来测试一下链接库中的函数println
        make一下test.c文件,详细makefile内容如下:(其中的\t被文本替换成了空格)

CFLAGS=-L${LD_LIBRARY_PATH} -lfruit -g

CXX=cc

TARGET=run

OBJS=test.o

all:${TARGET} ### clean

${TARGET}:${OBJS}
        ${CXX} -o $@ $?  ${CFLAGS}

*.o:*.c
        ${CXX} -c $< ${CFLAGS}

clean:
        rm -f *.o ${TARGET}

        这里面需要为编译器指定链接库所在的目录,使用的是-Ldir选项,由于
        变量LD_LIBRARY_PATH已经保存了链接库所在目录,因此我们使用了它。
        然后告诉编译器需要在那个链接库文件中查找,使用-lx选项,如本次需要
        查找到链接库文件为libfruit.so,就需要使用-lfruit选项(链接库必须以lib开头的)。
        执行make命令后,生成了可执行文件run。
        运行一下:
        ./run
        输出结果:
        Hello World Test
       
测试用的源代码如下:       
//file:libfruit.c
#ifndef __LIBFRUIT_C__
#define __LIBFRUIT_C__
#include
<stdio.h>

void println(char *msg)
{
    printf(
"%s\n");
}

#endif

//file:test.c
#ifndef __TEST_C__
#define __TEST_C__

#include
<stdio.h>


int main(int argc ,char** argv)
{
    println( 
"Hello World Test");
    
return 0;
}

#endif






posted on 2010-12-01 22:13 编码者-thinker 阅读(247) 评论(0)  编辑 收藏 引用 所属分类: Unix/Linux


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜