automake 共享库

使用automake编译共享库的两种方法

用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
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

你可能感兴趣的:(automake 共享库)