注明:我用的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