原创 Libtool创建和使用linux下动态库收藏


 

文件fun.c,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 <stdio.h>
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 <stdio.h>
#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

发表于 @ 2006年07月05日 17:56:00|评论(loading...)

新一篇: linux 编程的man手册网上地址 | 旧一篇: linux的动态库编译方法 shared object

用户操作
[即时聊天] [发私信] [加为好友]
芮雄健
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
文章分类
收藏
    Other's Blog
    Apache源码分析
    ARM开发&LCC分析
    autoConf & autoMake & Linux
    bat语法
    C#参考
    C++学习
    JAVA
    java技术体会
    Kendiv的专栏
    Linux 高手
    LISP研究者
    Make中文文档
    mp3与mp4数码产品的网站
    new Mobile MVP
    OPENGL
    RSS技术全面者---可看RSS
    SIP
    Unix
    WaterFlier
    一个java高手
    一位游戏开发者以及C++学习
    中国开源论坛
    中文手册页计划
    华清远见
    同学的blog
    工作流
    快乐龙虾
    机器人
    水之真谛(C#的attribue文章)
    流媒体
    流媒体
    电子线路查询网
    微电子类
    Eda专业网站
    fpga网站
    电子工程专辑
    硬件研发
    存档
    软件项目交易
    Csdn Blog version 3.1a
    Copyright © 芮雄健