在主程序中可以使用动态链接库中的全局变量是正确的,不可否认的,但这需要在程序编译链接时就要把动态库加上,并在需要使用的程序中使用extern声明变量,这其实没有达到动态库的本质目的(使用时再调用);这其实不算是一个大问题,如果只在一个进程中使用也不会有问题,这里主要讨论在多进程中使用动态库全局变量的问题。
如果想在进程间依靠动态库来共享全局变量恐怕是不太可能的事情,因为不同进程访问动态库时,是写时拷贝,即如果另外一个进程试图去修改动态库中的全局变量时,系统就会把这个全局变量拷贝一份单独给这个进程,而这个修改操作并不会影响到其他进程中变量的值。
测试结果:
可以看到,主进程首先修改了这个值,然后在子进程中读取到的是主进程修改后的值,但是子进程中的修改并没有影响到主进程中的使用的动态库中的全局变量。所以
试图使用动态库在进程间共享全局变量的方法是行不通的。
附:编译方法
gcc -fPIC-shared testshare.c -o libtestshare.so.2.0
gcc -o main -L/main main.c libtestshare.so.2.0
gcc -o main -L/main main.c libtestshare.so.2.0
./main
本文通过测试程序展示了在多进程中使用动态库全局变量的局限性,说明了动态库的本质并不支持进程间的直接共享全局变量。通过具体测试结果,解释了不同进程访问动态库时的写时拷贝机制,从而证明了试图在进程间共享动态库全局变量的方法不可行。
与进程之间共享全局变量可行性分析&spm=1001.2101.3001.5002&articleId=9774603&d=1&t=3&u=1d669f23001748c79ddd50cf51f31e35)
7763

被折叠的 条评论
为什么被折叠?



