用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
阅读(792) | 评论(0) | 转发(0) |