Chinaunix

标题: [求教]为什么gcc能找到lstdc++,但是ld却找不到 [打印本页]

作者: jeanlove    时间: 2008-10-10 23:04
标题: [求教]为什么gcc能找到lstdc++,但是ld却找不到
系统 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 编辑 ]
作者: MMMIX    时间: 2008-10-10 23:04
原帖由 lemoncookie 于 2008-10-11 09:55 发表
?
-v看到的那些是编译gcc的参数

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

这有什么好奇怪的,gcc 也是可以编译 C++ 代码的,只不过它默认的语言是 C 而已。
作者: MMMIX    时间: 2008-10-11 09:39
用 -v 看看 gcc 都给 ld 传了哪些参数。
作者: lemoncookie    时间: 2008-10-11 09:55
标题: 回复 #2 MMMIX 的帖子
?
-v看到的那些是编译gcc的参数

我奇怪的是lz用gcc编译cpp还没有问题,用g++
作者: lemoncookie    时间: 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
作者: jeanlove    时间: 2008-10-11 15:37
原帖由 MMMIX 于 2008-10-11 14:12 发表

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

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

谢谢,现在看得清楚了!
作者: MMMIX    时间: 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 可以显式的指定输入文件的语言,以及要链接的库。只要你愿意,可以把它作为一个通用的编译器。




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