Linux程序设计:创建自己的静态库

来源:互联网 发布:js图片缩放 编辑:程序博客网 时间:2024/06/07 04:42

Try It Out 

Static Libraries:

        在这个例子中,你要创建出属于你自己的小型库,它包括两个 function,然后运用它们其中之一到一个例程中。两个 function 叫做 fred 和 bill,它们仅仅是输出欢迎信息。

 

1.首先,为每个 function 创建独立的 source file(名为 fred.c 和 bill.c )。

这是第一个(fred.c):

这是第二个(bill.c):

 

2.你可以通过单独编译这些 function 来产生 object file,为把它们包含在一个库里做好准备。完成这个任务需要用到 C 编译器的 -c 选项,这个选项会阻止编译器试图创建一个完整的 program。如果尝试创建一个完整的 program 将会失败,因为你还没有定义一个main function。

        $ gcc -c bill.c fred.c
        $ ls *.o
        bill.o   fred.o

 

3.现在编写一个 program 来调用 bill function。首先,有个good idea:为你的库创建一个 header file,它需要声明你的库中和想要使用你的库的所有 applications 中的 functions。在 fred.c 和 bill.c 中包含这个header file 同样不失为一个good idea。这样做将帮助编译器消除所有错误。

        /*
           This is lib.h. It declares the functions fred and bill for users
        */
        void bill(char *);
        void fred(int);

 

4.这个用于调用的 program (名为program.c)可以非常简单。它包含库的 header file 和从库中调用一个 function。

 

5.现在你能够编译并测试它了。为编译器显式地指明 object file,并让它编译你的 file,然后和之前已编译好的 object module bill.o 链接。

        $ gcc -c program.c
        $ gcc -o program program.o bill.o
        $ ./program
        bill: we passed Hello World

 

6.现在你将创建和使用一个库了。利用 ar program 来创建 archive,并把你的 object file 添加到里面。这个 program 之所以叫做 ar 是因为它能创建在一个大型文件中一些小型文件的 archives,或 collections。注意,你也可以利用 ar 来创建任何类型的 file 的 archives。

        $ ar crv libfoo.a bill.o fred.o
        a - bill.o
        a - fred.o

 

7.现在创建了库,两个 object file 也添加进了库中。为了成功使用这个库,一些系统(这些明显地源于Berkeley UNIX)要求为这个库创建一个内容表。完成这个任务要用到 ranlib 命令。在Linux中,当你使用的是 GNU 软件开发工具的时候,这一步不是必要的(但也没有坏处)。

        $ ranlib libfoo.a

 

现在,你的库已经可以用了。你可以通过编译器添加使用到的 file 列表来创建你的 program,如下:

        $ gcc -o program program.o libfoo.a
        $ ./program
        bill: we passed Hello World

原创粉丝点击