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
- Linux程序设计:创建自己的静态库
- Linux程序设计之创建静态库
- Linux下创建和维护自己的静态库
- 创建自己的静态链接库
- 创建和维护自己的静态库
- iOS开发,创建自己的静态库
- iOS中创建自己的静态库
- IOS_创建自己的Framework静态库
- 创建自己的Framework静态库
- 创建属于自己的静态库,并合并静态库
- KEIL 创建静态链接库+ 调用自己创建的静态链接库
- 创建自己的动态链接库和静态链接库
- VC手把手一步步创建自己的静态链接库
- iphone中使用Xcode创建自己的静态链接库
- 创建自己的通用静态库 --- 很详细
- Xcode 创建静态库封装自己的SDK
- QT创建自己的静态库并使用
- Linux创建静态库
- notes - solaris - devices and filesystems
- 通用的分页模型实现.
- Oracle session总结
- [转]我对C++内存分配方式的一点看法
- notes - solaris - basic administration
- Linux程序设计:创建自己的静态库
- Beep
- [转]strcpy()、memcpy()、memmove()、memset()的实现
- d025: 从 n 个数中挑选出最大的数
- Ubuntu下Flash中将汉字显示为方格的解决办法
- 基于CAN总线的匹配标定协议
- 笑死我了
- Autosar技术概述
- 多锻炼自己的表达能力,多学点经济学