说明
测试内容:静态库libFun.a的一个函数libFun()依赖于另一个文件vara.c的一个函数varaFun().更改varaFun()内容,测试libFun()的反应。
测试结果:只是链接关系,不用重新编译静态库。程序运行了新的内容。
注意:如果直接用到头文件的结构体,由于头文件会被直接编译进去,所以改变结构体lib并不能更新!!!已测试。
vara.h
#ifndef __VARA_FUN_H__
#define __VARA_FUN_H__
void varaFun(char* str);
#endif
更改前vara.c
#include <stdio.h>
#include "vara.h"
void varaFun(char *str)
{
printf("%s\n",str);
}
lib.h
#ifndef __LIB_FUN_H__
#define __LIB_FUN_H__
void libFun(char* str);
#endif
lib.c
#include <stdio.h>
#include "vara.h"
void libFun(char* str)
{
printf("libFun call varaFun:\n");
varaFun(str);
}
main.c
#include "lib.h"
int main()
{
libFun("just one");
}
第一次编译:
gcc -c main.c lib.c vara.c
ar -rcs -o libFun.a lib.o //这里不用 vara.o 因为只是链接并不编译进去
gcc -o testMain main.o libFun.a vara.o //这里必须要vara.o 也说明了vara的内容并没有编译到libFun中去,只是建立链接
第一次运行:
./testMain
libFun call varaFun:
just one
更改后的vara.c
#include <stdio.h>
#include "vara.h"
void varaFun(char *str)
{
printf("yes I'm the varaFun,and the str is:");//增加内容
printf("%s\n",str);
printf("work done\n");//增加内容
}
第二次编译:
gcc -c vara.c //只需要重新编译改变的文件
gcc -o testMain main.o libFun.a vara.o
第二次运行:
./testMain
libFun call varaFun:
yes I’m the varaFun,and the str is:just one
work done