登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天道酬勤 玩物丧志

用勇气去改变可以改变的事情,用胸怀去包容无法改变的事情,用智慧去判断两者的区别

 
 
 

日志

 
 

gcc 预编译 查看内建宏  

2016-09-13 10:08:13|  分类: GCC |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
gcc 预编译, 可查看符号位置
gcc -c 改成 -E

查看内建宏
arm-elf-gcc -E -dM -<1.c >1.txt
其中1.c为空文件

gcc默认的链接脚本linkcmd
我们系统下是 -Wl,verbose 注意中间是“,"而且没有空格

核心提示:首先声明不是讲lds语法的  在<<程序员的自我修养-链接装载与库>>一书中曾提到ld默认使用的链接脚本  说默认在/usr/lib/ldscripts/下  结果我找了半天没找到我的系统是fedora8  find/-name*lds*找不到...

首先声明不是讲lds语法的

  在  <<程序员的自我修养-链接装载与库>>一书中曾提到ld默认使用的链接脚本

  说默认在/usr/lib/ldscripts/下

  结果我找了半天没找到  我的系统是fedora 8

  find / -name *lds*  找不到 找script也找不到 晕了

  后来查了下发现可以用ld -verbose查看默认的lds

  输出如下:

  GNU ld version 2.19.51.0.14-34.fc12 20090722

  Supported emulations:

  elf_i386

  i386linux

  elf_x86_64

  using internal linker script:

 ==================================================

  /* Script for -z combreloc: combine and sort reloc sections */

  OUTPUT_FORMAT("elf32-i386", "elf32-i386",

  "elf32-i386")

  OUTPUT_ARCH(i386)

  ENTRY(_start)

  SEARCH_DIR("/usr/i686-redhat-linux/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");

  SECTIONS

  {

  /* Read-only sections, merged into text segment: */

  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment",

  0x08048000) + SIZEOF_HEADERS;

  ........

  后面略

  这就奇怪了,那么这个lds到底在哪呢?

  我们用find /usr/* |xargs grep "Script for -z combreloc"看看

  结果 Binary file /usr/bin/ld matches 可见已经集成到ld中了

  readelf -P --string-dump=.rodata ld便可以找到


GCC and Make

Compiling, Linking and Building
C/C++ Applications

  评论这张
 
阅读(391)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018