ld

本文详细解析了GCC如何编译和链接C与C++文件的过程。包括C文件的编译流程、所需的库文件及路径;C++文件的编译与链接流程、额外所需库文件及其位置等关键信息。
    一般情况下,用gcc只能编译cpp而不能link,而对c是没问题的。对此研究两天终于有了结论:
1)gcc可以link c文件仅仅是内部调了ld而已,不能link cpp因为cpp的库gcc“没法”给ld(估计在gcc中仅仅写死了c的库)
2)编译link c文件:gcc首先调用cc1编译,生成.s,然后调用as生成.o,最后调用ld生成.out。如果使用.o生成.out至少需要的东西:crt0.o cygwin.a "kernel32.a"
命令:ld -o **.out /lib/crt0.o **.o -lcygwin -lkernel32.cygwin.a很容易找到,估计是在默认的lib path下。但kernel32.a(是否真的叫它,还不知道),还没找到。crt0.o负责启动,调main....
3)编译link cpp文件:首先生成.o,然后同样需要上述的文件以及库,还需要libc++.a libgcc.a,在$GCC/../lib/gcc/i686-pc-cygwin/3.4.5(version),所以最简单的形式是:
ld -o **.out /lib/crt0.o **.o -L$GCC/../lib/gcc/i686-pc-cygwin/3.4.5 -lcygwin -lkernel32 -lstdc++ -lgcc.
4)可能还有其它库,以及路径,但上述是最基本的。如果想知道gcc或g++究竟做了什么,用-v参数可以看看。
5)在cygwin下,有的文件不是FAT的或NTFS,只能在cygwin下才能看到。比如/usr/lib。
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值