织梦CMS - 轻松建站从此开始!

罗索

gcc编译ld连接问题

落鹤生 发布于 2012-04-27 10:06 点击:次 
最近在用gcc编译,之后ld连接时,发现生成的bin无法执行,狂搜了一阵。现问题已经解决,简化阐述如下
TAG:

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

1 源文件hello.c
#include <stdio.h>

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的连接详情,还了解不慎透彻,还望读者指教。

(韵寒书香)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201204/15966.html]
本文出处:chinaunix.net 作者:韵寒书香 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容