gcc编译,ld连接

/*****************************************************************************************************************************

原文地址:http://blog.csdn.net/lanxinju/article/details/6078045

评价:照做了,但是没有成功。不过也算找到同路人了。。。

*******************************************************************************************************************************/


编写一个hello world的简单程序(hello.c):

1:  #include <stdio.h>
2:  
3:  int main(void)
4:  {
5:      printf("Hello world!/n");
6:  
7:      return 0;
8:  }

直接编译很简单:

gcc –o hello.o hello.c

但是如果使用gcc编译,然后使用ld连接,就会出错:

gcc –c –o hello.o hello.c 
ld –o hello hello.o 
连接时警告没有入口_start(程序原始的入口为_start,执行一些堆栈初始化工作,然后再跳入main函数),生成的hello文件无法执行。

说明分开连接的时候少做了一些事,使用gcc -v选项查看gcc编译时的信息: 
gcc –o hello.o hello.c –v

最终的解决方案是:

gcc –c –o hello.o hello.c 
ld –o hello –dynamic-linker /lib/ld-linker.so.2 /usr/lib/crt1.o /usr/lib/crti.o –l hello.o /usr/lib/ctrn.o

编译就可以了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值