Linux 动态连接库
fun.c:
int add(int a, int b)
{
return a+b;
}
fun.h:
#ifndef _FUN_H_11
#define _FUN_H_11
文件fun.clinux动态库,fun.h,hello.c,hello.h,main.c动态库函数都在fun.c和hello.c里面 fun.c: int add(int a, int b) { return a+b; } fun.h: #ifndef _FUN_H_11 #define _FUN_H_11 int add(int a, int b); #endif ---------------------------- hello.c: #i nclude void output(char *ss) { printf("HELLO %s\n", ss); } hello.h #ifndef HELLO_H_111 #define HELLO_H_111 void output(char *ss); #endif ---------------------------- main.c: #i nclude #i nclude "hello.h" #i nclude "fun.h" void main() { output("world"); printf("Test Value:%d\n", add(1, 2)); } 使用libtools创建和使用安装动态库步骤: (1) libtool --mode=compile gcc -g -O -c hello.c libtool --mode=compile gcc -g -O -c fun.c libtool --mode=compile gcc -g -O -c main.c #生成各自的o文件 (2) libtool --mode=link gcc -g -O -o libhello.la hello.lo fun.lo -rpath /usr/local/lib -lm #连接成动态库文件 (3) libtool --mode=link gcc -g -O -o test main.o libhello.la -lm #连接生成可执行文件test (4) libtool --mode=install cp libhello.la /usr/local/lib/libhello.la libtool --mode=install install -c libhello.la /usr/local/lib/libhello.la libtool -n --mode=finish /usr/local/lib libtool install -c test /usr/local/bin/test #安装动态库 然后就可以运行/usr/local/bin/test了,当然路径可以任意设置,这是手动过程,写成Makefile文件为: OBJS = fun.o hello.o LO_OBJS = main.lo fun.lo hello.lo PACKAGE_VERSION = 1:1:1 LIBDIR=/usr/local/lib all : test install : libhello.la test : libhello.la main.o libtool --mode=link gcc -g -O -o test main.o libhello.la -lm libhello.la : $(OBJS) libtool gcc -g -O -o libhello.la $(LO_OBJS) -rpath ${LIBDIR} -lm -version-info ${PACKAGE_VERSION} main.o : main.c fun.h hello.h libtool --mode=compile gcc -g -O -c main.c fun.o : fun.c fun.h libtool --mode=compile gcc -g -O -c fun.c hello.o : hello.c hello.h libtool --mode=compile gcc -g -O -c hello.c clean : @rm -f OBJ/* lib*.a *~ *core *.lo *.o *.la @rm -rf .libs (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |