1、 如果你做的动态库里面有全局变量,而且你想让不同的进程通过动态库的全局变量实现共享访问,那是不可行的。
2、主进程如果访问动态库的全局变量是可以的,不过你需要在主进程中extern声明一下这个动态库中的全局变量,然后主进程就可以使用这个全局变量了。
进程1和进程2在使用动态库的时候实际上是代码段共享,而数据段和堆栈是独立出来,系统会自动拷贝一份内存给另一个进程,也就是说动态库的全局变量在fork后就变成了两个独立的空间,两个进程在对这个全局变量操作的时候就已经是在独立操作互不干涉了。
3、实例验证上面的说法:
主程序采用fork的方式:
#include <stdio.h>
#include <unistd.h>
#include "testshare.h"
extern int global_i;
extern int fork_i;
int main()
{
int i = 1000;
int k = 0;
printf("*******************************\n");
printf("In main process, before modify.\n");
printf("global_i = %d.\n", global_i);
printf("fork_i = %d.\n", fork_i);
global_i = 1555;
fork_i = 2000;
printf("*******************************\n");
printf("In main process, after modify.\n");