免费注册 查看新帖 |

Chinaunix

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

gcc静态库链接 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-12 12:08 |只看该作者 |倒序浏览
环境:ubuntu

编译出现的问题:用GCC编译找不到 printf等常用函数(stdio.h中声明的)

abc.c.text+0x1b4): undefined reference to `printf'

曾尝试指定 /usr/lib/libc.a,这回printf不包错了,但出现如下错误:

/usr/lib/libc.a(iofwrite.o): In function `fwrite':
(.text+0x144): undefined reference to `_Unwind_Resume'

这到底是怎么回事?按正常来说是不用指定 /usr/lib/libc.a(系统默认链接的).........

论坛徽章:
0
2 [报告]
发表于 2010-08-12 12:09 |只看该作者
回复 1# kallytin


    先顶一下

论坛徽章:
0
3 [报告]
发表于 2010-08-12 12:26 |只看该作者
回复 2# kallytin


    有人知道吗?

论坛徽章:
0
4 [报告]
发表于 2010-08-12 12:46 |只看该作者
贴代码吧。不然看不出问题。

论坛徽章:
0
5 [报告]
发表于 2010-08-12 12:51 |只看该作者
/lib/libc-*.so被删了吧

论坛徽章:
0
6 [报告]
发表于 2010-08-12 12:56 |只看该作者
本帖最后由 zhangsuozhu 于 2010-08-12 13:00 编辑
外部库有两种:
(1)静态连接库libc.a
(2)共享连接库libc.so
两者的共同点:
.a, .so都是.o目标文件的集合,这些目标文件中含有一些函数的定义(机器码),而这些函数将在连接时会被最终的可执行文件用到。
两者的区别:

态库.a : 当程序与静态库连接时,库中目标文件所含的所有将被程序使用的函数的机器码被copy到最终的可执行文件中. 静态库有个缺点:
占用磁盘和内存空间. 静态库会被添加到和它连接的每个程序中, 而且这些程序运行时, 都会被加载到内存中. 无形中又多消耗了更多的内存空间.

享库.so : 与共享库连接的可执行文件只包含它需要的函数的引用表,而不是所有的函数代码,只有在程序执行时,
那些需要的函数代码才被拷贝到内存中, 这样就使可执行文件比较小,



编译时要联静态库要加 -static 参数
  1. gcc  test.c
  2. ls -l a.out
  3. -rwxr-xr-x 1 alanx alanx 7057 2010-08-12 12:57 a.out
  4. gcc -static test.c
  5. ls -l a.out
  6. -rwxr-xr-x 1 alanx alanx 495437 2010-08-12 12:58 a.out
复制代码

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
7 [报告]
发表于 2010-08-12 13:00 |只看该作者
本帖最后由 ecjtubaowp 于 2010-08-12 13:03 编辑

printf,你用的应该是动态库的方式吧,在/lib目录下有libc-*.so的。

论坛徽章:
0
8 [报告]
发表于 2010-08-12 13:10 |只看该作者
/lib/libc-*.so被删了吧
zhangsuozhu 发表于 2010-08-12 12:51


楼上,能说详细点吗? (我在/lib里只找到一个libc-2.8.90.so)

论坛徽章:
0
9 [报告]
发表于 2010-08-12 14:08 |只看该作者
上代码

论坛徽章:
0
10 [报告]
发表于 2010-08-12 14:18 |只看该作者
上代码
zhangsuozhu 发表于 2010-08-12 14:08


我所编译的程序在 redhat 底下是没有问题的...........

另,补充一点,之前说得不够详细,那就是 问题是出现在 链接 阶段的,即在链接阶段说找不到printf等函数(每个程序单独编译成 *.o 的过程是没问题的)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP