使用Automake生成Makefile及动态库和静态库的创建.doc

上传人:b****1 文档编号:233975 上传时间:2022-10-07 格式:DOC 页数:9 大小:79KB
下载 相关 举报
使用Automake生成Makefile及动态库和静态库的创建.doc_第1页
第1页 / 共9页
使用Automake生成Makefile及动态库和静态库的创建.doc_第2页
第2页 / 共9页
使用Automake生成Makefile及动态库和静态库的创建.doc_第3页
第3页 / 共9页
使用Automake生成Makefile及动态库和静态库的创建.doc_第4页
第4页 / 共9页
使用Automake生成Makefile及动态库和静态库的创建.doc_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

使用Automake生成Makefile及动态库和静态库的创建.doc

《使用Automake生成Makefile及动态库和静态库的创建.doc》由会员分享,可在线阅读,更多相关《使用Automake生成Makefile及动态库和静态库的创建.doc(9页珍藏版)》请在冰豆网上搜索。

使用Automake生成Makefile及动态库和静态库的创建.doc

使用Automake生成Makefile及动态库和静态库的创建

使用Automake创建和使用静态库

1.目录结构如下:

[c-sharp] viewplaincopy

1.example  

2.|——src 目录(存放源代码文件)  

3.        |——hello.c  

4.|——lib 目录(存放用来生成库的文件)  

5.        |——test.c 用来生成静态库libhello.a  

6.|——include 目录(存放程序中使用的头文件)  

7.        |——hello.h  

2.编写的各个目录下的源文件

[c-sharp] viewplaincopy

1.hello.h 文件  

2.extern void print(char *);  

3.test.c 文件  

4.#include  

5.void print(char *msg)  

6.{  

7.print(“%s/n”, msg);  

8.}  

9.hello.c 文件  

10.#include “hello.h”  

11.int main()  

12.{  

13.print(“Hello static library!

”);//这里用到的是静态库中的函数  

14.return 0;  

15.}  

 

3.编写lib/Makefile.am文件

[c-sharp] viewplaincopy

1.noinst_LIBRARIES=libhello.a  

2.libhello_a_SOURCES=test.c  

3.AUTOMAKE_OPTIONS=foreign  

 

第一行noinst表示生成的是静态库,不需要makeinstall,直接制定它的位置和名字就

可以使用。

第二行表示用来生成静态库的源文件。

如果要把静态库生成到其他地方,可以在=后面

加上路径(建议用绝对路径,并将所要用到的静态库生成在同一个文件夹下,如lib)。

第三行AUTOMAKE_OPTIONS是Automake的选项。

Automake主要是帮助开发GNU软

件的人员来维护软件,所以在执行Automake时,会检查目录下是否存在标准GNU软件中

应具备的文件,例如'NEWS'、'AUTHOR'、'ChangeLog'等文件。

设置为foreign时,Automake

会改用一般软件的标准来检查。

如果不加这句的话,需要在autoconf之前,先执行touchNEWS

READMEAUTHORSChangeLog来生成'NEWS'、'AUTHOR'、'ChangeLog'等文件

4.编写src/Makefile.am文件

[c-sharp] viewplaincopy

1.AUTOMAKE_OPTIONS=foreign  

2.INCLUDES= -I../include  

3.bin_PROGRAMS=hello  

4.hello_SOURCES=hello.c  

5.hello_LDADD=../lib/libhello.a  

 

第二行指定头文件的位置,-I是idirafter的缩写。

../include指定头文件的位置,..是上

一级目录,也就是这里的example目录。

第三行指定生成可执行文件名hello,在这里可执行文件生成在src下,建议将可执行文

件生成到一个特定的文件夹下,让它和源代码分开,如/root/test目录下。

写法为:

[c-sharp] viewplaincopy

1.bin_PROGRAMS=/root/test/hello,后面的第四、五行也相对应地变为:

  

2._root_test_hello_SOURCES=hello.c  

3._root_test_hello_LDADD=../lib/libhello.a  

 

第四行指定生成可执行文件hello的源代码文件,如果hello.c在其他目录下,需要加上

完整的路径。

第五行指定需要使用静态库的位置。

5.生成静态库文件lib/libhello.a。

执行autoscan生成configure.scan文件,将它重命名为configure.in并修改其内容。

[c-sharp] viewplaincopy

1.#configure.in  

2.# Process this file with autoconf to produce a configure script.  

3.AC_PREREQ(2.59)  

4.AC_INIT(libhello.a,1.1,[])  

5.AM_INIT_AUTOMAKE  

6.# Checks for programs.  

7.AC_PROG_CC  

8.# Checks for libraries.  

9.AC_PROG_RANLIB//需要加入的内容,因为使用了静态库  

10.# Checks for header files.  

11.# Checks for typedefs, structures, and compiler characteristics.  

12.# Checks for library functions.  

13.AC_OUTPUT([Makefile])  

14.AC_INIT(FILE)  

 

该宏用来检查源代码所在路径,autoscan会自动产生,一般无须修改它。

AM_INIT_AUTOMAKE(PACKAGE,VERSION)

这个是使用Automake所必备的宏,PACKAGE是所要产生软件的名称,VERSION是版

本编号。

也可以把包和版本号等信息放在AC_INIT(FILE)宏里。

AC_PROG_CC

检查系统可用的C编译器,若源代码是用C写的就需要这个宏。

AC_OUTPUT(FILE)

设置configure所要产生的文件,若是Makefile,configure便会把它检查出来的结果

填充到Makefile.in文件后产生合适的Makefile。

后面的FILE是一个Makefile的输出列表,

你可以选着将要输出的Makefile的位置和个数。

建议只在src中输出Makefile。

在lib目录下依次执行aclocal、autoconf、automake--add-missing、./configure、make,

此时在该目录下就可以看到生成的静态库文件libhello.a

6.在src目录下,执行autoscan生成configure.scan文件,将它重命名为configure.in并修

改其内容。

[c-sharp] viewplaincopy

1.#configure.in  

2.# Process this file with autoconf to produce a configure script.  

3.AC_PREREQ(2.59)  

4.AC_INIT(hello,1.1,[])  

5.AM_INIT_AUTOMAKE  

6.AC_CONFIG_SRCDIR([hello.c])  

7.# Checks for programs.  

8.AC_PROG_CC  

9.# Checks for libraries.  

10.# Checks for header files.  

11.# Checks for typedefs, structures, and compiler characteristics.  

12.# Checks for library functions.  

13.AC_OUTPUT([Makefile])  

 

7.在src目录下依次执行aclocal、autoconf、automake--add-missing、./configure、make,

生成可执行文件hello

8.执行makeinstall进行安装,最后输入hello来运行程序,查看效果:

Hellostaticlibrary!

执行成功!

使用gcc创建和使用静态库

1.编写mylib.h文件

[c-sharp] viewplaincopy

1.#ifndef _mylib_h_  

2.#define _mylib_h_  

3.void welcome();  

4.void outstring(const char * str);  

5.#endif  

 

2.编写mylib.c文件,用来生成静态库。

[c-sharp] viewplaincopy

1.#include   

2.void welcome()  

3.{  

4.printf(“welcome to libmylib/n”);  

5.}  

6.void outstring(const char * str)  

7.{  

8.if(str!

=NULL)  

9.printf(“%s”,str);  

10.}  

 

3.编译源文件,产生目标代码

gcc–omylib.o–cmylib.c

4.将上面产生的目标文件加入到静态库中,并把静态库拷贝到系统默认的路径

[c-sharp] viewplaincopy

1.ar rcs libmylib.a mylib.o  

2.cp libmylib.a /usr/lib/  

 

5.编写测试程序来使用刚才创建的静态库libmylib.a

[c-sharp] viewplaincopy

1.#include “mylib.h”  

2.#include   

3.Int main()  

4.{  

5.printf(“create and use library:

/n”);  

6.welcome();  

7.outstring(“It’s a successful/n”);  

8.}  

 

6.编译使用库函数的程序

[c-sharp] viewplaincopy

1.gcc –o test test.c -lmylib  

运行./test查看结果。

使用Automake创建和使用动态库

动态库与静态库的差别在于:

动态库是在程序执行的时候加载到内存,供调用函数使用。

1.目录结构如下:

[c-sharp] viewplaincopy

1.example  

2.|——src 目录(存放源代码文件)  

3.|——hello.c  

4.|——lib 目录(存放用来生成库的文件)  

5.|——test.c 用来生成动态库libhello.la  

6.|——include 目录(存放程序中使用的头文件)  

7.|——hello.h  

 

2.编写各个目录下的源文件如下:

[c-sharp] viewplaincopy

1.hello.h 文件  

2.extern void print(char *);  

3.test.c 文件  

4.#include

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1