GLD中文手册.doc
《GLD中文手册.doc》由会员分享,可在线阅读,更多相关《GLD中文手册.doc(86页珍藏版)》请在咨信网上搜索。
1、标 题: GLD中文手册-前言前段时间从天天十多个小时的工作时间中挤出那么点时间完毕了NASM手册的翻译,之后得到了汇编版很多朋友的支持与关心,心中非常感激。但是我们知道,NASM只是一个汇编器,只有它我们还无法完毕我们的工作,NASM功能很强大,能生成很多目的格式的文献,但是得不到我们最终想要的可执行文献。对,我们还需要一个连接器。可供选择的连接器有很多,它们当中也有很多是免费的,这在NASM的手册中也有介绍,这里我选择的是GNU的连接器ld,为了能更好地使用这个工具,就有了这篇翻译文档。请不要误会,gld并不只能运营在unix/linux系统下面。GCC的windows版本djgpp带有l
2、d的windows版本,可以通过互联网免费下载。希望这篇文档能对大家有所帮助,谢谢。标 题: GLD中文手册-(一)使用ld*本文档介绍GNU连接器ld的2.14版本.本文档在GNU自由文档许可证下发行.在GNU自由文档许可证一章中有关于本许可证的一份拷贝.概述*ld把一定量的目的文献跟档案文献连接起来,并重定位它们的数据,连接符号引用.一般,在编译一个程序时,最后一步就是运营ld.ld能接受连接命令语言文献,这是一种用AT&T的连接编辑命令语言的超集写成的文献,用来在连接的整个过程中提供显式的,全局的控制.本版本的ld使用通用BFD库来操作目的文献.这就允许ld读取,合并,写入目的文献时,可
3、以使用各种不同的格式,比如,COFF或a.out. 不同的格式可以被连接到一起产生一个有效的目的文献.除了它的灵活性,GNU连接器比其它连接器更有用的地方在于它提供了诊断信息. 许多连接器在碰到一个错误的时候立即放弃执行;但ld却可以继续执行,以让你发现其他的错误(或者,在某些情况下,得到一个带有错误的输出文献)引用*GNU连接器ld可以解决大量的不同情况,并且跟其他的连接器保持尽也许的兼容.这样,你就拥有更多的选择来控制它的行为.命令行选项=连接器提供大量的命令行选项,但是,在实际使用中,只有少数被经常使用.比如,ld的一个经常的使用场合是在一个标准的Unix系统上连接标准的Unix目的文献
4、.在这样的一个系统上,连接文献hello.o如下: ld -o OUTPUT /lib/crt0.o hello.o -lc这告诉ld产生一个叫OUTPUT的文献,作为连接文献/lib/crt0.o和hello.o和库libc.a的结果.libc.a来自标准的搜索途径.(参阅下文的关于-l选项的讨论).有些命令行选项可以在命令行的任何位置出现.但是,那些带有文献名的选项,比如-l或者-T,会让文献在选项出现的位置上被读取. 对于非文献选项,以带不同的参数反复它,不会有进一步的效果,或者覆盖掉前面的相同项.那些多次出现时具有特殊含义的选项会在下文的描述中指出.无参数选项是那些被连接的目的文献和档
5、案文献.它们也许紧随命令行选项,或在它们前面,或者跟它们夹杂在一起,但是一个目的文献参数是不会出现在一个选项跟它的参数之间的.通常,连接器至少引用一个目的文献,但是你可指定其它形式的二进制输入文献,这可以通过-l,-R或者脚本命令语言来实现.假如没有任何二进制文献被指定,连接器不会产生任何输出,并给出信息:缺少输入文献.假如连接器不能辨认目的文献的格式,它会假设这些只是连接脚本.以这种方式指定的脚本增长了连接用的主连接脚本的内容(主连接脚本即缺省连接脚本或使用-T指定的脚本). 这个特性可以允许连接器连接一些文献,它们看上去既像目的文献,又像档案文献,但事实上只是定义了一些符号值,或者使用IN
6、PUT或GROUP来载入其它的目的文献.需要注意的是,用这种方式指定一个脚本只是增长了主连接脚本的内容;要完全替换掉主连接脚本,需要使用-T.对于名称是单个字符的选项,选项参数必须紧跟在选项字母后面,中间不留空,或者也可留有一个空格.对于名称是多个字符的选项,选项前可以有一个或两个破折号;比如,-trace-symbol和-trace-symbol是等价的. 注意,对于这条规则有一个例外.那些以小写字母o开头的多字符选项前面只能是两个破折号,这是为了避免跟选项-o混淆. 比如-omagic把输出文献的名字定为magic,而-omagic在输出文献中设立NMAGIC标志.多字符选项的参数必须跟选
7、项名间以一个等于号分开,或者以一个空格分开.比如:-trace-symbol foo和-trace-symbol=foo是等价的. 多字符选项的名字唯一缩写符也是可以被接受的.注意,假如连接器通过被编译器驱动来间接引用(比如gcc), 那所有的连接器命令行选项前必须加上前缀-Wl(或者能被特定编译器驱动接受的其他前缀),就像下面这样: gcc -Wl,-startgroup foo.o bar.o -Wl,-endgroup这很重要,由于否则的话,编译器驱动程序会默认丢掉这些连接选项,产生一个错误的连接.下面是关于被GNU连接器接受的常用命令行开关的一个列表:-aKEYWORD 这个选项在HP
8、/UX兼容系统上被支持. 参数KEYWORD必须是下面字符串中的一个 :archive, shared, or default. -aarchive在功能上跟 -Bstatic相同,而此外两个关键字功能上跟-Bdynamic相同. 这个选项可 被多次使用.-AARCHITECTURE-architecture=ARCHITECTURE 在最近发行版本的ld中,这个选项只在Intel 960系列架构上有用. 在那种ld配置中,参数ARCHITECTURE拟定960系列的某一特定架构,启用某些安全措施,并修改档案库的搜索途径. 将来的ld发行版也许为其它架构系列支持相似的功能.-b INPUT-F
9、ORMAT-format=INPUT-FORMAT ld可以被配置为支持多于一种的目的文献.假如你的ld以这种方式被配置,你可以使用-b选项为输入目的文献指定二进制格式. 就算ld被配置为支持可选目的格式,你不必经常指定这一项,由于ld被配置为在每一台机子上把最常用的格式作为默认输入格式. INPUT-FORMAT是一个字符串, 你也许在连接一个不常用的二进制格式文献时需要这个参数.你也可使用-b来显式切换格式(在连接不同格式的目的文献时),方法是在每一组特定格式的目的前使用-b INPUT-FORMAT. 缺省的格式是从环境变量GNUTARGET中得到的.你也可以从一个脚本中定义输入格式,使
10、用的命令是TARGET.-c MRI-COMMANDFILE-mri-script=MRI-COMMANDFILE 为了跟MRI生产的连接器兼容,ld接受另一种用受限命令语言写成的脚本文献,通过选项-c引入MRI脚本文献;使用-T选项是运营用普通ld脚本语言写的连接脚本.假如MRI-CMDFILE不存在,ld在-L指定的目录中寻找.-d-dc-dp 这三个选项是等价的; 多字符形式是为了跟其他连接器兼容才被支持的.它们给普通符号分派空间,即使一个重定位输出文献已经被指定(通过-r). 脚本命令FORCE_COMMON_ALLOCATION具有同样的效果. -e ENTRY-entry=ENTR
11、Y 使用符号ENTRY作为你的程序的开始执行点,而不是使用缺省的进入点.假如没有叫做ENTRY的符号,连接器会企图把ENTRY作为一个数字进行分析,并使用它作为入口地址(数字会被解释为10进制的;你可以使用前导的0x强制为16进制,或0作为8进制.) -E-export-dynamic 当创建一个动态连接的可执行程序时, 把所有的符号加到动态符号表中.动态符号表是一个符号集,这些符号对于运营时的动态对象是可见的. 假如你不使用这个选项,动态符号表中就会只具有那些连接进来的动态对象中用到的符号 假如你使用dlopen来载入动态对象,它需要引用程序中的符号,那你也许需要在连接程序时用到这个选项.
12、你也可以使用版本脚本来控制哪些符号应当被加到动态符号表中.-EB 连接big-endian对象. 这会影响缺省输出格式.-EL 连接little-endian对象. 这会影响缺省输出格式.-g 忽略. 为了跟其它工具兼容而提供.-i 执行一个增量连接(跟-r等同)-init NAME 当创建一个ELF可执行文献或共享对象时,当可执行文献或共享对象被加载时,调用NAME, 这是通过把DT_INIT设立成函数的地址实现的. 缺省情况下,连接器使用_init作为调用的函数.-lARCHIVE-library=ARCHIVE 增长一个档案文献ARCHIVE到连接的文献列表中.这个选项可以被多次使用.
13、ld会为每一个指定的ARCHIVE搜索它的途径列表,寻找libARCHIVE.a 对于支持共享库的系统, ld也许还会搜索扩展名不是.a库.特别的,在ELF和SunOS系统上,ld会在搜索带有.a扩展名的库前搜索带.so扩展名的库. -M-print-map 打印一个连接位图到标准输出.一个连接位图提供的关于连接的信息有如下一些: * 目的文献和符号被映射到内存的哪些地方. * 普通符号如何被分派空间. * 所有被连接进来的档案文献,尚有导致档案文献被包含进来的那个符号.-n-nmagic 关闭所有节的页对齐,假如也许,把输出格式标记为NMAGIC.-N-omagic 把text和data节设
14、立为可读写.同时,取消数据节的页对齐,同时,取消对共享库的连接.假如输出格式支持Unix风格的magic number, 把输出标志为OMAGIC.-no-omagic 这个选项执行的操作大部分正好跟-N相反.它设立text节只读,强制data节页对齐. 但是,这个选项并不启动连接共享库的功能. 使用-Bdynamic启动这个功能.-o OUTPUT-output=OUTPUT 使用OUTPUT作为ld产生的程序的名字;假如这个选项没有指定,缺省的输出文献名是a.out.脚本命令OUTPUT也可以被用来指定输出文献的文献名.-O LEVEL 假如LEVEL是一个比0大的数值, ld优化输出.这
15、也许会明显多占用时间,所以只有在生成最后的文献时使用.-q-emit-relocs 把重定位节和内容留在完全连接后的可执行文献中. 连接分析和优化工具也许需要这些信息用来进行对的的修改与执行. 这在大的可执行文献中有用. 这个选项目前只支持ELF平台.-r-relocateable 产生可重定位的输出, 比如,产生一个输出文献它可再次作为ld的输入.这经常被叫做部分连接.作为一个副作用,在支持标准Unix魔数的环境中,这个选项会把输出文献的魔数设立为OMAGIC. 假如这个选项没有被指定,一个绝对文献就会被产生.当连接C+程序时,这个选项就不会解析构造函数的引用;要解析,必须使用-Ur 假如输
16、入文献跟输出文献的格式不同,只有在输入文献不具有重定位信息的时候部分连接才被支持.输出格式不同的时候会有更多的限制.比如,有些a.out的格式在输入文献是其他格式的时候完全不支持部分连接. 这个选项跟-i等效.-R FILENAME-just-symbols=FILENAME 从FILENAME中读取符号名跟它们的值,但不重位这个文献,或者主线不把它包含在输出文献中.这就允许你的输出文献引用其它程序中定义的绝对内存地址.你可以多次使用这个选项. 为了跟其他ELF连接器兼容,假如-R选项后面跟有一个目录名,而不是一个文献名,它会被解决成-rpath选项.-s-strip-all 忽略输出文献中所
17、有的符号信息.-S-strip-debug 忽略输出文献中所有的调试符号信息(但不是所有符号).-t-trace 打印ld解决的所有输入文献的名字. -T SCRIPTFILE-script=SCRIPTFILE 把SCRIPTFILE作为连接脚本使用. 这个脚本会替代ld的缺省连接脚本(而不是增长它的内容),所以命令文献必须指定所有需要的东西以精确描述输出文献.假如SCRIPTFILE在当前目录下不存在,ld会在-L选项指定的所有目录下去寻找.多个-T选项会使内容累积.-u SYMBOL-undefined=SYMBOL 强制SYMBOL在输出文献中作为一个无定义的符号被输入.这样做会有一些
18、效果,比如,会引发从标准库中连接更多的模块. -u可以以不同的参数反复使用,以输入多个无定义的符号.这个选项跟连接脚本命令中的EXTERN是等效的.-Ur 对于不是C+的程序,这个选项跟-r是等效的: 它产生可重定位的输出,比如,一个输出文献它可以再次作为ld的输入. 当连接C+程序时,-Ur解析构造 函数的引用,跟-r不同. 但假如在一些用-Ur连接过的文献上再次使用 -Ur,它不会工作,由于一旦构造函数表被建立,它不能被添加内容.请只在最后一遍连接的时候使用-Ur, 对其它的,只使用-r.-unique=SECTION 对于所有匹配SECTION的输入节,在输出文献中都各自创建单独的节,或
19、者,假如可选的通配符SECTION参数丢失了,为每一个孤儿输入节创建一个输出节. 一个孤儿节是一个连接脚本中没有指定的节.你可以在命令行上多次使用这个选项; 阻止对同名输入节的合并,在连接脚本中重载输出节分派.-v-version-V 显示ld的版本. -V选项同时会列出支持的模拟器. -x-discard-all 删除所有的本地符号.-X-discard-locals 删除所有的临时本地符号.对于大多数目的平台,就是所有的名字以L开头的本地符号. -y SYMBOL-trace-symbol=SYMBOL 打印出所有SYMBOL出现的被连接文献的名字. 这个选项可以被多次使用. 在很多系统中
20、,这在预先拟定底线时很有必要. 当你拥有一个未定义的符号,但不知道这个引用出自哪里的时候,这个选项很有用.-Y PATH 为缺省的库搜索途径增长一条途径.这个选项是为了跟Solaris兼容.-z KEYWORD 能被辨认的关键字涉及initfirst, interpose, loadfltr, nodefaultlib, nodelete, nodlopen, nodump, now, origin,combreloc, nocombreloc and nocopyreloc. 为了跟 Solaris兼容,所有其它的关键字都被忽略. initfirst标志一个对象,使它在运营时,在所有其他对象
21、之前被初始化. interpose标志一个对象,使它的符号表放在所有其他符号之前,作为重要的执行者. loadfltr标志一个对象,使它的过滤器在运营时立即被解决.nodefaultlib标志一个对象,使在搜索本对象所依赖的库时,忽略所有缺省库搜索途径. nodelete标志一个对象,使它在运营时不会被从内存中删除.nodlopen标志一个对象,使这个对象不可以通过dlopen载入.nodump标志一个对象,使它不能被dldump转储. now标志一个对象,使它成为非懒惰运营时绑定对象. origin标志一些也许具有$ORIGIN的对象,defs不允许无定义符号. muldefs允许重定义.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GLD 中文 手册
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。