免费注册 查看新帖 |

Chinaunix

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

静态库文件包含extern变量,其他程序用到这个库文件时编译出问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 10:25 |只看该作者 |倒序浏览
本帖最后由 wd_000 于 2011-12-20 10:26 编辑

问题描述:文件列表如下:a.h,a.c,mylib.h,mylib.c,b.h, b.c
a.h和b.h都只有个如下的宏,无实质内容
#ifndef __A_H__
#define __A_H__
#endif
mylib.h如下:
#ifndef __MYLIB_H__
#define __MYLIB_H__
void testMylib(void);
#endif
mylib.c如下:
#include <stdio.h>
#include "mylib.h"
extern int a;
void testMylib(void)
{
        a = 2;
        printf("this is mylib, a = %d\n", a);
}
a.c如下:
#include <stdio.h>
#include "a.h"
#include "mylib.h"
int a = 1;
void testA(void)
{
        printf("this is a, a = %d\n", a);
}
int main(int argc, char *argv[])
{
        testA();
        testMylib();
        return 0;
}
b.c如下:
#include <stdio.h>
#include "b.h"
#include "mylib.h"
void testB(void)
{
        printf("this is b\n";
}
int main(int argc, char *argv[])
{
        testB();
        testMylib();
        return 0;
}
现在编译过程如下:
先编译静态库:
gcc -o mylib.o -c mylib.c
ar crv libmylib.a mylib.o
生成静态库文件libmylib.a
然后编译a.c
gcc a.c libmylib.a -o a
编译成功生成可执行文件a
接着编译b.c
gcc b.c libmylib.a -o b
产生如下错误:
libmylib.a(mylib.o): In function `testMylib':
mylib.c.text+0x6): undefined reference to `a'
mylib.c.text+0x10): undefined reference to `a'
collect2: ld 返回 1
请问这个问题如何解决才能使得b.c也能正确编译?

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2011-12-20 12:26 |只看该作者
a 定义在 a.c 中
mylib.c中没有a,b.c中也没有a,你说 gcc b.c libmylib.a -o b 能link成功吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP