免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: nari396
打印 上一主题 下一主题

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

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

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
12 [报告]
发表于 2007-12-14 13:15 |只看该作者
我想看看你编译动态库的Makefile,如果可以,把源码也贴出来

论坛徽章:
0
13 [报告]
发表于 2007-12-14 13:53 |只看该作者
不好意思,是i
void c() 里处理i变量的.
代码已近给出了,我没有Makefile
手动编译的:
(1)把a.h a.cc编译成liba.so
把b.h b.cc编译成libb.so
(2)编译main.cc 为main.o
g++ -c main.cc
(3)编译
g++ -o main main.o liba.so libb.so
等到main
(4)运行./main
等到结果
1a 0
2a 1
1a 1
2a 2

g++把库中的void c()认为是一个函数了,有没有什么办法使得g++认为a()调用自己的c()
b()也是调用自己的c()呢???

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
14 [报告]
发表于 2007-12-16 01:16 |只看该作者
编码连这个都不注意吗?.........居然有两个c()外部接口

论坛徽章:
0
15 [报告]
发表于 2007-12-17 09:42 |只看该作者
要调用的c()的库是系统提供的,不是自己写的。
在vc编译的时候是没有问题的,a认自己的c,b也认自己的c
在gcc里就不行了

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

a.cc 内容
#include
#include
#include        "a.h"
static int i;

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

链接成.so的时候出错:
cc -shared  a.o b.o   -o libab.so
b.o(.text+0x0): In function `c()':
: multile definition of `c()'
a.o(.text+0x0): first defined here

  1. void c()
  2. /* changed to */
  3. static void c()
复制代码

运行结果为:
$ ./main
1a 0
2a 1
1b 0
2b 1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP