测试目的:动态库中全局变量的使用方法
测试经过:动态库a中有一个全局变量,动态库b链接动态库a,主程序c链接a、b,在程序c中改变全局变量的值,查看pri在动态库b中的值是否改变了
测试结果:主程序和库b共用一套a的动态库,共用一套全局变量。
库a的代码:
#include<stdio.h>
int pri =0;
void fun()
{
printf("i am is a ,pri = %d\n",pri);
}
void change()
{
pri = 6;
}
编译:gcc -shared sa.c -o libsa.so
#include<stdio.h>
#include<sa.h>
void fun_b()
{
printf("i am is b\n");
fun();
}
编译:gcc -shared sb.c -o libsb.so
主程序C的代码:
#include<stdio.h>
#include "sa.h"
#include "sb.h"
int main()
{
fun();
printf("===========================\n");
fun_b();
printf("===========================\n");
change();
printf("===========================\n");
fun_b();
printf("===========================\n");
fun();
}
编译:gcc -I../sa -I../sb -o test main.c -lsa -lsb
注意:动态库使用的时候ldd test会发现自己编译的库无法找到,所以可以把动态库移动到/lib或/usr/lib目录下
输出结果:
i am is a ,pri = 0
===========================
i am is b
i am is a ,pri = 0
===========================
===========================
i am is b
i am is a ,pri = 6
===========================
i am is a ,pri = 6