FreeBSD可执行程序格式(2)

2009-05-13 13:35:54来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

不论对于a.out格式还是ELF格式,FreeBSD均支持动态连接,因此应用程序缺省就使用动态连接的方式。如果想使用静态连接,可以在应用程序编译连接时,指定-static连接选项,将目标程序连接成静态连接的执行文件。由于库代码被连接进执行文件中,静态连接的执行文件要比动态连接的执行文件要大。$ 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来确定一个程序使用的动态连接库:
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)
  

  • 其他系统的执行文件

  很多其他Unix系统,例如BSD/OS和Linux,也是运行在Intel平台上的系统,那么执行程序中的处理器指令是完全相同的,不同之处只在于应用程序的格式、应用程序与操作系统的接口、库文件等。事实上由于同为Unix系统,这些差异也很小,因此通过调整内核的一些参数设置,FreeBSD完全可以直接运行这些系统下的执行程序。
  FreeBSD能够同BSD/OS、NetBSD和OpenBSD的Intel平台上的应用程序相兼容,同为BSD家族的成员,他们非常类似。NetBSD、OpenBSD和FreeBSD同为免费系统,并且具有同样的起源,与FreeBSD的关系非常密切,因此FreeBSD能直接运行NetBSD和OpenBSD的Intel平台下的执行程序。然而NetBSD和OpenBSD 也是自由操作系统,因此它们中的应用程序也会有相应的FreeBSD版本,因此这个功能一般很少用到。BSDI是一个商业公司,因此会提供BSD/OS下的二进制执行文件,但不提供源代码。FreeBSD能够完美的运行BSD/OS下的a.out格式的执行文件,ELF执行格式的程序也能执行,但偶尔会有问题发生,因此就需要调整系统设置。
FreeBSD也能够执行SCO Unix的执行文件,这需要使用内核的ibcs2( Intel binary compatibility system 2)选项。这需要载入一个内核可加载模块,这需要使用root身份执行ibcs2命令以载入ibcs2模块。# ibcs2
  可以在rc.conf中设置 “ibcs2_enable=YES” ,使开机后立即载入这个模块。
  但是要执行SCO的应用程序,仅有内核支持还是不够的,还需要有SCO Unix的函数库。但SCO Unix的库函数是SCO Unix的一部分,受版权保护的。如果使用者拥有合法的SCO共享库和应用程序,就可以运行SCO Unix上的大型商业应用程序。
  同样,FreeBSD也能够运行Linux的可执行程序,与执行SCO程序类似,这也要求内核支持并载入相应的模块。rc.conf中的相应参数为 “linux_enable” 。
# linux
  但是与SCO不同的是,Linux是一种自由操作系统,其库函数为GNU开发的函数库,使用GNU通用许可保护自由使用的权利。因此FreeBSD在Packages Collection中提供了Linux的共享库,安装了这些Linux的库函数之后,就可以执行Linux的执行程序了。
# pkg_add /cdrom/packages/All/linux_lib-2.6.tgz
  FreeBSD也能执行Solaris x86和SCO Unixware的ELF格式执行程序,只是这个功能还没有加入正式发行版本。同样,这也需要相应的系统动态连接库文件,但是这些库是商业产品,因此使用起来就会受到限制。

  • 运行Linux应用程序

    标签:

    版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:FreeBSD可执行程序格式(1)

下一篇:FreeBSD Ports Collection(1)