免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5270 | 回复: 15
打印 上一主题 下一主题

GCC如何处理共享库中的static变量的啊 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-13 10:50 |只看该作者 |倒序浏览
如a.so b.so中间都有static int c
a.so中c变化时,b.so中c是否也变化呢?如果不想变,该怎么办?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2007-12-13 10:57 |只看该作者
这两个可不是同一个c

论坛徽章:
0
3 [报告]
发表于 2007-12-13 11:21 |只看该作者
可是发现c确实变化了

论坛徽章:
0
4 [报告]
发表于 2007-12-13 11:22 |只看该作者
我在windows vc下执行正常的(c是不变的)

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2007-12-13 12:39 |只看该作者
nm a.so b.so我看看

论坛徽章:
0
6 [报告]
发表于 2007-12-13 17:35 |只看该作者

完全可能。我在gcc+linux上遇到过。
static标示名字会被export的。所以,同一进程内会产生覆盖。

论坛徽章:
0
7 [报告]
发表于 2007-12-14 10:30 |只看该作者
a.h内容
#if !defined(__A_H_)
#define __A_H_
void a();
#endif

a.cc 内容
#include <stdlib.h>
#include <stdio.h>
#include        "a.h"
static int i;

void c()
{
        printf("1a %d\n",i);
        i++;
        printf("2a %d\n",i);       
}

void a()
{
        c();       
}

b.h内容
#if !defined(__B_H_)
#define __B_H_
void b();
#endif

b.cc 内容
#include <stdlib.h>
#include <stdio.h>
static int i;

void c()
{
        printf("1b %d\n",i);
        i++;
        printf("2b %d\n",i);       
}

void b()
{
   c();
}


main.cc 内容
#include <stdio.h>
#include <stdlib.h>
#include        <unistd.h>
#include "a.h"
#include "b.h"

int main(int argc,char *argv[])
{       
        a();       
        sleep(1);
        b();       
}
a.cc和b.cc生成共享文件liba.so libb.so
main执行时;
1a 0
2a 1
1a 1
2a 2

论坛徽章:
0
8 [报告]
发表于 2007-12-14 10:33 |只看该作者
nm liba.so的内容
00001768 d DW.ref.__gxx_personality_v0
00001658 a _DYNAMIC
00001744 a _GLOBAL_OFFSET_TABLE_
         w _Jv_RegisterClasses
00000544 T _Z1av
000004ec T _Z1cv
00001648 d __CTOR_END__
00001644 d __CTOR_LIST__
00001650 d __DTOR_END__
0000164c d __DTOR_LIST__
00000640 r __FRAME_END__
00001654 d __JCR_END__
00001654 d __JCR_LIST__
0000176c A __bss_start
         w __cxa_finalize@@GLIBC_2.1.3
00000570 t __do_global_ctors_aux
00000450 t __do_global_dtors_aux
00001760 d __dso_handle
         w __gmon_start__
         U __gxx_personality_v0@@CXXABI_1.3
000004e7 t __i686.get_pc_thunk.bx
0000176c A _edata
00001774 A _end
000005a4 T _fini
000003b8 T _init
00000420 t call_gmon_start
0000176c b completed.5758
000004b0 t frame_dummy
00001770 b i
00001764 d p.5756
         U printf@@GLIBC_2.0

论坛徽章:
0
9 [报告]
发表于 2007-12-14 10:35 |只看该作者
nm libb.so内容跟上面的是一样的
00001768 d DW.ref.__gxx_personality_v0
00001658 a _DYNAMIC
00001744 a _GLOBAL_OFFSET_TABLE_
         w _Jv_RegisterClasses
00000544 T _Z1bv
000004ec T _Z1cv
00001648 d __CTOR_END__
00001644 d __CTOR_LIST__
00001650 d __DTOR_END__
0000164c d __DTOR_LIST__
00000640 r __FRAME_END__
00001654 d __JCR_END__
00001654 d __JCR_LIST__
0000176c A __bss_start
         w __cxa_finalize@@GLIBC_2.1.3
00000570 t __do_global_ctors_aux
00000450 t __do_global_dtors_aux
00001760 d __dso_handle
         w __gmon_start__
         U __gxx_personality_v0@@CXXABI_1.3
000004e7 t __i686.get_pc_thunk.bx
0000176c A _edata
00001774 A _end
000005a4 T _fini
000003b8 T _init
00000420 t call_gmon_start
0000176c b completed.5758
000004b0 t frame_dummy
00001770 b i
00001764 d p.5756
         U printf@@GLIBC_2.0

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2007-12-14 13:13 |只看该作者
那里面根本就没有c啊,你用的是哪个c?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP