Chinaunix

标题: 菜鸟问个关于全局变量连接的问题 [打印本页]

作者: lingxuwaltz    时间: 2010-09-12 18:39
标题: 菜鸟问个关于全局变量连接的问题
there are some global vars defined in a.cpp,b.cpp use one global var which is defined in a.cpp.the question is:how to compile and link b.cpp?

比如下面的测试例子:
vi a.c

#include <stdio.h>

int a,b;

int main()
{
  int c;
  c=a+1;
  printf("c=%d\n",c);
  return 0;
}

vi b.c

#include <stdio.h>

extern b;

int main()
{
  int d;
  d=b-1;
  printf("d=%d\n",d);
  return 0;
}

我想的是把a.c弄成一个库给b.c调用,结果如下:
test]$ gcc a.c b.c -c
test]$ ls
a.c  a.o  a.out  b.c  b.o  doubletest.c
test]$ ar r liba.a a.o
ar: creating liba.a
test]$ file liba.a
liba.a: current ar archive
test]$ gcc b.o -o b -L. -la
./liba.a(a.o)(.text+0x0): In function `main':
: multiple definition of `main'
b.o(.text+0x0): first defined here
collect2: ld returned 1 exit status
为什么不行呢?

大哥们帮帮忙,拜谢了!
作者: hellioncu    时间: 2010-09-12 18:55
a、b都有main
作者: lingxuwaltz    时间: 2010-09-12 19:05
就是a、b都有main的时候怎么办呢
作者: zhangsuozhu    时间: 2010-09-12 19:35
回复 3# lingxuwaltz


   去掉一个main或分别编译
作者: pengjianbokobe    时间: 2010-09-12 19:37
你是想一个程序里有两个main?? 好吧,算你狠。。
作者: liwangli1983    时间: 2010-09-12 20:18
函数的名字是强符号,不能同时出现两个,链接会报错。若是一个强符号,一个弱符号重名,会以强符号为准。两个弱符号重名,随机挑选一个。

函数名和已初始化的全局变量名为强符号,未初始化的全局变量名为弱符号
作者: lingxuwaltz    时间: 2010-09-12 21:07
谢谢各位了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2