大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 操作系统 -> FreeBSD -> FreeBSD下的可执行程序格式

FreeBSD下的可执行程序格式

时间: 2021-07-31 作者:daque

在 freebsd下的可执路途序常常可分为两类,一类为运用百般证明谈话编写的剧本,如sh、awk、perl、tcl等,那些步调须要证明步调举行证明实行,玲珑简单,对于实行不常运用、不诉求功效的步调特殊有效;另一类即是运用c等高档谈话编写翻译后爆发的可实行二进制步调。 1) 证明剧本步调运用 file吩咐不妨确认文献的典型,囊括不妨决定一个步调是可径直实行的二进制步调,仍旧证明剧本步调。 $ file a.out a.out: elf 32-bit lsb executable, intel 80386, version 1 (freebsd), dynamically linked (uses shared libs), not stripped $ file /etc/rc /etc/rc: bourne shell script text executable unix之以是功效宏大,因为之一就在乎它供给了宏大的再开拓本领。这不只与供给了高档谈话c的编写翻译器相关,并且也与供给了很多种能以证明办法实行的大略剧本谈话相关。证明步调剧本的特性是简单性、大略精巧,并且也比拟简单进修动手。很多情景下,须要实行的处事工作功效比拟简单,并不须要一再运转,并且诉求赶快编写出来,这就符合运用证明型谈话编写,而且证明步调自己就完备处置文本和字符串的便利性,并不妨和很多现有步调经过体例供给的弹道、情况变量等办法贯串起来,使得它们特殊符合实行文本处置功效。 证明谈话的缺陷是历次运路途序时都要载入谈话的证明器,证明执路途序,所以功效较低,而且不许径直安排外存和 i/o摆设,不符合编写巨型步调和对功效诉求较高的场所。 每个证明剧本步调的第一条龙指出该剧本步调运用的证明器,比方一个普遍的 shell步调的第一动作: #! /bin/sh 各别的证明谈话可用在各别的上面,最常用的有 shell证明步调,按照运用shell的各别,也分为各别的shell剧本,基础上也分为sh和csh两种各别的作风。体例处置中常常运用shell步调来实行少许凡是处置工作,很多软硬件也运用shell步调来供给扶助安置和树立工作。perl也是一种常用的、功效宏大的证明谈话,它兼有证明性步调的简单性和高档编制程序谈话的宏大功效,使步调员能在很短的功夫内写出特殊灵验的步调。所以perl获得了稠密步调员的扶助,经过为perl开拓了更多的步调模块,进一步使得perl的处置本领变得更为宏大。暂时perl仍旧变成了最时髦的一种证明谈话,更加在编写web效劳器上的cgi步调上面,更是居于无可争议的位置。tcl/tk是另一种证明谈话,它能用在x window体例下,运用刻画谈话表露各别的x控件,所以很多x运用步调运用它来创造本人的图形接口。 2) 二进制执路途序运用高档谈话编写、并过程编写翻译获得的二进制执路途序实行功效更高,而且惟有二进制方法的实行文献本领充溢运用 unix体例供给的十足功效。同样体例内核也是一个特出方法的二进制实行文献。 早期的 unix运用a.out方法动作它的实行文献方法,跟着unix的兴盛,又展示了其余几种实行文献的方法,暂时最要害的实行文献方法为elf方法,沿用这种方法的首先办法是为了在各别平台间沿用沟通的实行文献方法,并实行动静共享贯穿库。固然elf文献方法并没有到达at&t首先构想的十足手段,但这种文献方法却变成最时髦的实行文献方法。除此除外,本质运用的文献方法再有一种较老的coff方法,这种方法是在unix system v r3.第22中学运用的,暂时惟有老本子的sco unix中还在运用它,而sco也正渐渐转向elf方法。 freebsd不妨同声扶助这两种实行文献的方法,freebsd 2.2.x之前的本子运用a.out方法动作缺省的实行文献方法,到freebsd 3.x之后elf方法变成缺省的实行文献方法,而且此后会完全转向elf。究竟上在freebsd下的a.out方法完备了十分多的个性,如动静贯穿等elf方法完备的个性,也有少许elf方法不完备的个性,如收缩实行文献方法。但因为freebsd中运用的编写翻译器gcc确定不复扶助a.out方法的来由,所以freebsd也必需转向elf方法。这也是暂时还扶助a.out方法的freebsd本子缺省运用较老本子编写翻译器的因为之一。 在 freebsd中,a.out方法的实行文献不妨扶助收缩实行方法,这使得运用gzip收缩过的a.out方法的实行文献也能登时实行。elf方法的步调不供给这种扶助。 freebsd的文献方法从aout到elf的变化是突变的,开始是在3.0-release中将执路途序的缺省方法变化为elf方法,内核文献还维持aout方法,直至freebsd-3.1,十足实行文献方法才缺省树立为elf方法。 转向 elf也形成很多关系步调的变化,如原有的boot loader不扶助elf方法的内核,3.1-release就晋级到新boot loader;而原有的可加载模块lkm为aout方法,也须要转向elf方法的modules。新可加载模块的场所为/modules目次,并运用kldload、klduload、kldstat来举行处置。(aout方法的模块处置吩咐为modload、modstat和modunload)。 a.out和elf方法运用的库文献也是各别的,运用elf实行文献方法的freebsd 3.x中,/usr/lib下为elf方法的因变量库,而用一个子目次/usr/lib/aout寄存a.out方法的因变量库,用来兼容2.2.x之前本子的freebsd步调。但这给少许运用包装本领的软硬件(少许华文外挂体例)形成了少许小烦恼。对各别方法的实行文献要运用各别的包装库,体例不会将与步调自己方法各别的贯穿库贯穿到步调上,对应的缺点消息为 “ bad magic ” ,指出文献方法的各别。 因为 3.x之后的缺省方法为elf方法,为了天生a.out方法的文献,必需在编写翻译和贯穿时运用 -aout参数,报告编写翻译器gcc和贯穿器ld运用各别的方法天生实行文献。 3) 静态贯穿和动静贯穿在操纵体例兴盛的早期,除去内核供给的接口,一切的库因变量都要贯穿到步调中,如许一切的步调都不妨径直在体例内核下运转。但是究竟上海大学局部步调城市运用少许沟通的库因变量,更加是在运用高档谈话编制程序的功夫,常常都运用同样的库。比方, c谈话编写的步调常常都运用printf因变量举行输入,运用scanf读入用户输出实质。即使每个库因变量都贯穿到用户步调中,如许每个步调城市囊括这个因变量的一个正片,就滥用了外存空间。 所以,新颖操纵体例运用动静贯穿的本领,不将常用的库径直编写翻译进每个步调中,而是保持相映的接口,在前核载入步调时,再运用动静贯穿步调将库载入并和执路途序贯穿起来。这即是动静贯穿的本领,因为库和步调是辨别载入的,所以多个步调不妨共享一个库的同一个正片,俭朴了资源。 不管对于 a.out方法仍旧elf方法,freebsd均扶助动静贯穿,所以运用步调缺省就运用动静贯穿的办法。即使想运用静态贯穿,不妨在运用步调编写翻译贯穿时,指定-static贯穿选项,将目的步调贯穿成静态贯穿的实行文献。因为库代码被贯穿进实行文献中,静态贯穿的实行文献要比动静贯穿的实行文献要大。

quote:

$ cc -static -o a1 hello.c $ cc -o a2 hello.c $ ls -l a1 a2 -rwxr-xr-x 1 wb wheel 45017 apr 18 16:26 a1 -rwxr-xr-x 1 wb wheel 2540 apr 18 16:27 a2

在 freebsd下,共享库被放到/etc/ld-config设定的目次下,常常为/usr/lib,每个库文献运用.so和库的本子号结果。比方,libc.so.3.1为一个规范c库因变量的动静共享库文献。对于a.out方法的实行文献,其动静库文献坐落/usr/lib/aout目次下。 不妨运用步调 ldd来决定一个步调运用的动静贯穿库:

quote:

bash-2.02$ ldd /usr/bin/vi /usr/bin/vi: libcurses.so.2 => /usr/lib/libcurses.so.2 (0x2808e000) libtermcap.so.2 => /usr/lib/libtermcap.so.2 (0x2809a000) libc.so.3 => /usr/lib/libc.so.3 (0x2809f000)

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.