免费注册 查看新帖 |

Chinaunix

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

[求教]为什么gcc能找到lstdc++,但是ld却找不到 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-10 23:04 |只看该作者 |倒序浏览
10可用积分
系统 debian4etch/CENTOS5

我编译一个c++程序,例如a.cpp,里面用到iostream等c++库,然后
gcc a.cpp -lstdc++是可以的
但是我如果:
gcc -c a.cpp
ld -o a.out g.o -dy /usr/lib/libstdc++.so
就不行,报错误
ld: cannot find -lstdc++
然后我在/usr/lib下面找到了libstdc++.so.6

我想知道: 为什么gcc能正确链接正确版本(它也是调用ld去的吧),ld就不行
非得:

ld -o a.out g.o -dy /usr/lib/libstdc++.so.6才能找到库,而且还有错:
ld: warning: can't find entry symbol _start; default to 00000000080481b4
a.o: in function 'main'


请问: 怎么解决这个ld的问题呢? 我的希望是能直接用ld而不是通过gcc来链接和生成。

谢谢!

[ 本帖最后由 jeanlove 于 2008-10-11 00:12 编辑 ]

最佳答案

查看完整内容

-v 看到的是 gcc 调用 as/ld 之类程序的时候传给它们的参数。这有什么好奇怪的,gcc 也是可以编译 C++ 代码的,只不过它默认的语言是 C 而已。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2008-10-10 23:04 |只看该作者
原帖由 lemoncookie 于 2008-10-11 09:55 发表
?
-v看到的那些是编译gcc的参数

-v 看到的是 gcc 调用 as/ld 之类程序的时候传给它们的参数。
我奇怪的是lz用gcc编译cpp还没有问题,用g++

这有什么好奇怪的,gcc 也是可以编译 C++ 代码的,只不过它默认的语言是 C 而已。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2008-10-11 09:39 |只看该作者
用 -v 看看 gcc 都给 ld 传了哪些参数。

论坛徽章:
0
4 [报告]
发表于 2008-10-11 09:55 |只看该作者

回复 #2 MMMIX 的帖子

?
-v看到的那些是编译gcc的参数

我奇怪的是lz用gcc编译cpp还没有问题,用g++

论坛徽章:
0
5 [报告]
发表于 2008-10-11 15:05 |只看该作者

回复 #4 MMMIX 的帖子

ft
你编译过gcc就知道
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr ...
这些东西是编译gcc时的选项了

gcc编译old fashion的cpp程序可能没问题
碰到不能用gcc编译的cpp程序多了,所以不再用gcc编cpp

论坛徽章:
0
6 [报告]
发表于 2008-10-11 15:37 |只看该作者
原帖由 MMMIX 于 2008-10-11 14:12 发表

-v 看到的是 gcc 调用 as/ld 之类程序的时候传给它们的参数。

这有什么好奇怪的,gcc 也是可以编译 C++ 代码的,只不过它默认的语言是 C 而已。

谢谢,现在看得清楚了!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2008-10-11 16:29 |只看该作者
原帖由 lemoncookie 于 2008-10-11 15:05 发表
ft
你编译过gcc就知道
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr ...
这些东西是编译gcc时的选项了

你难道没有看到这行后面的输出?

gcc编译old fashion的cpp程序可能没问题
碰到不能用gcc编译的cpp程序多了,所以不再用gcc编cpp

gcc 可以显式的指定输入文件的语言,以及要链接的库。只要你愿意,可以把它作为一个通用的编译器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP