Chinaunix首页 | 论坛 | 博客
  • 博客访问: 616041
  • 博文数量: 201
  • 博客积分: 3076
  • 博客等级: 中校
  • 技术积分: 2333
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-02 19:44
文章分类

全部博文(201)

文章存档

2010年(118)

2009年(83)

我的朋友

分类: LINUX

2009-09-24 14:32:53

用automake编译共享库有多种方法,automake本身提供了对编译共享库支持,当然我们也可以不使用它的这个功能,下面分别介绍这两种方法:

一、不使用automake编译共享库功能
configure.ac和Makefile.am的配置和可执行文件基本相同,仅仅Makefile.am中的变量名有些区别,另外需要再加上“-fPIC -shared”链接选项,
如可以将“bin_”改成其它名字,如“module_”,这样就变成了:
LDFLAGS=-fPIC -shared
moduledir=$(prefix)/lib # 请注意由于module不是automake标准的名称,所以需要自己加上安装目前
module_PROGRAMS = libfoo.so
libfoo_so_SOURCES = foo.c foo.h

二、使用automake编译共享库功能
automake提供的编译共享库功能比较完善,支持同时编译出静态和共享两个,及带版号的多个版本,方法如下:
1、需要在configure.ac或configure.in文件中增加如下一句:
AC_PROG_LIBTOOL

2、在运行automake -a之前,需要执行
libtoolize -f -c

3、Makefile.am的格式有点区别,如下:
lib_LTLIBRARIES = libfoo.la  # 注意不是libfoo.so
libicammcdir = /usr/lib #库安装目录
libfoo_includedir = /usr/local/foo/include  #安装后头文件存放目录
libfoo_include_HEADERS = foo.h  #安装头文件
libfoo_la_SOURCES = foo.cpp foo.h

这样编译成功之后,共享库将生成在.libs目录下,包括如下一些文件:
-rw-r--r--  1 jayyi users 11092 2007-06-08 16:48 libfoo.a
lrwxr-xr-x  1 jayyi users    10 2007-06-08 16:48 libfoo.la -> ../libfoo.la
-rw-r--r--  1 jayyi users   989 2007-06-08 16:48 libfoo.lai
lrwxr-xr-x  1 jayyi users    13 2007-06-08 16:48 libfoo.so -> libfoo.so.0.0.0*
lrwxr-xr-x  1 jayyi users    13 2007-06-08 16:48 libfoo.so.0 -> libfoo.so.0.0.0*
-rwxr-xr-x  1 jayyi users 13361 2007-06-08 16:48 libfoo.so.0.0.0*
-rw-r--r--  1 jayyi users 11044 2007-06-08 16:48 foo.o
阅读(785) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~