本小测试程序是从<<linux程序设计第4版>>摘录;
直接入正正题:
我们要创建一个表态库,libfoo.a
所用文件: fred.c bill.c
其中fred.c代码如下:
- #include <stdio.h>
- void fred(int arg)
- {
- printf("fred: we passed %d\n", arg);
- }
其中bill.c 代码如下:
- #include <stdio.h>
- void bill(char *arg)
- {
- printf("bill: we passed %s\n", arg);
- }
这样我们做好了两个源文件。
我们还要做一个头文件lib.h,代码其实就是包涵这两个函数就行了。
- void bill(char *);
- void fred(int);
然后我们进行编译:把源文件编译成目标文件。
gcc -c bill.c fred.c
这样会生成两个.o文件,fred.o bill.o
然后我们就可以写测试程序了。我们写一个program.c.
- #include <stdlib.h>
- #include "lib.h"
- int main(int argc, char *argv[])
- {
- bill("hello world");
- exit(0);
- }
然后我们就可以编译了
gcc -c program.c
同样也是编译出目标文件。
然后我们可以编译出可执行文件。
gcc -o program program.o bill.o
这种方法我们一般都知道。
下面我们把bill.o 和 fred.o编译到静态库里。用ar命令。具体怎么用可以去查下。
ar crv libfoo.a bill.o fred.o
ar创建归档文件;AR = AR=/usr/local/ndk/toolchain/arm-eabi/bin/arm-eabi-ar
crv为参数。
libfoo.a为目标库,后面是生成库所用文件夹;
然后就可以看到libfoo.a,这个时候我们要用ranlib来对静态库的符号索引表进行更新;
ranlib libfoo.a
然后可以用这个库了
gcc -o program program.o libfoo.a
也可以用
gcc -o program program.o -L. lfoo
-L指定路径,要全路径,.是当前路径。
转载于:https://blog.51cto.com/yxc6123/946015