Chinaunix首页 | 论坛 | 博客
  • 博客访问: 417110
  • 博文数量: 38
  • 博客积分: 2513
  • 博客等级: 少校
  • 技术积分: 471
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-22 13:35
文章分类

全部博文(38)

文章存档

2010年(4)

2009年(6)

2008年(28)

我的朋友

分类: LINUX

2008-06-19 18:26:02

最近在用gcc编译,之后ld连接时,发现生成的bin无法执行,狂搜了一阵。
现问题已经解决,简化阐述如下:


1 源文件hello.c
#include

int main(int argc, char *argv[])
{
    printf("hello\n");
    return 0;
}


2 gcc编译
    gcc hello.c -o hello
    然后运行
    ./hello
    输出结果
    hello
    
3 gcc编译,ld连接
    gcc -c hello.c -o hello.o
    ld -o hello hello.o
    此时会出现问题,生成的hello文件无法执行
   
4 解决
    既然步骤2中生成的hello可以执行,我们就看看gcc做了些什么
    修改如下
    gcc hello.c -o hello -v
    此时会打印出gcc的操作步骤的,看看就明白了
   
5 完结
    LFLAGS+= --eh-frame-hdr -m elf_i386 --hash-style=gnu -dynamic-linker /lib/ld-linux.so.2
    LFLAGS+= /usr/lib/gcc/i386-redhat-linux/4.1.1/../../../crt1.o /usr/lib/gcc/i386-redhat-linux/4.1.1/../../../crti.o /usr/lib/gcc/i386-redhat-linux/4.1.1/crtbegin.o
    LFLAGS+= --no-as-needed /usr/lib/gcc/i386-redhat-linux/4.1.1/crtend.o /usr/lib/gcc/i386-redhat-linux/4.1.1/../../../crtn.o
    gcc -c hello.c -o hello.o
    ld $(LFLAGS) -o hello hello.o
    成功,运行正常
   
6 疑惑
    虽然通过查看gcc编译连接过程的输出信息能够解决ld连接问题,但是关于ld的连接详情,还了解不慎透彻,还望读者指教。
 
阅读(11506) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~