`

虚拟化技术与跨平台兼容性

阅读更多

虚拟化:

1 .硬件级 VMware/VirtualPC

2. 编程语言级 JVM .NET/CIL

3. 程序库级 wine

 

兼容性:

A library is binary compatible, if a program linked dynamically to a former version of the library continues running with newer versions of the library without the need to recompile.

If a program needs to be recompiled to run with a new version of library but doesn't require any further modifications, the library is source compatible.

Binary compatibility saves a lot of trouble. It makes it much easier to distribute software for a certain platform. Without ensuring binary compatibility between releases, people will be forced to provide statically linked binaries. Static binaries are bad because they

  • waste resources (especially memory)
  • don't allow the program to benefit from bugfixes or extensions in the libraries

 

1. 源码级 QT程序(不同系统版本提供同名API) glibc和uclibc

2. 二进制级 JVM

 

ABI(ApplicationBinaryInterface)

应用二进制接口,描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低层接口。ABI不同于应用程序接口(API),API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译,然而ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。

 

ABI是二进制映像的“生产者”即编译/连接工具和使用者即映像装入/启动手段之间的一组约定。而我们一般 所说的二进制映像格式,实际上并不仅仅是指字面意义上的、类似于数据结构定义那样的“格式”,还包括了跟映像装入过程有关的其它约定。所以,二进制映像格式是ABI的主体。

 

以下转自陈硕http://www.cppblog.com/Solstice/archive/2011/03/09/141401.aspx 

如果以 shared library 方式提供函数库,那么头文件和库文件不能轻易修改,否则容易破坏已有的二进制可执行文件,或者其他用到这个 shared library 的 library。操作系统的 system call 可以看成 Kernel 与 User space 的 interface,kernel 在这个意义下也可以当成 shared library,你可以把内核从 2.6.30 升级到 2.6.35,而不需要重新编译所有用户态的程序。

 

所谓“二进制兼容性”指的就是在升级(也可能是 bug fix)库文件的时候,不必重新编译使用这个库的可执行文件或使用这个库的其他库文件,程序的功能不被破坏。

 

C/C++ 通过头文件暴露出动态库的使用方法,这个“使用方法”主要是给编译器看的,编译器会据此生成二进制代码,然后在运行的时候通过装载器(loader)把可执行文件和动态库绑到一起。如何判断一个改动是不是二进制兼容,主要就是看头文件暴露的这份“使用说明”能否与新版本的动态库的实际使用方法兼容。因为新的库必然有新的头文件,但是现有的二进制可执行文件还是按旧的头文件来调用动态库。

 

解决办法:

(1)采用静态链接 这个是王道。在分布式系统这,采用静态链接也带来部署上的好处,只要把可执行文件放到机器上就行运行,不用考虑它依赖的 libraries。

(2)通过动态库的版本管理来控制兼容性 《程序员的自我修养》里边讲过 .so 文件的命名与二进制兼容性相关的话题,值得一读。

 

java是如何应对的:Java 实际上把 C/C++ 的 linking 这一步骤推迟到 class loading 的时候来做。

 

同一版本的QT运行于不同系统是源码兼容,不同版本的兼容是二进制级的(Binary compatibility means that you can safely

distribute your Qt programs dynamically linked to the Qt library. If the users of your program have a newer version of the

Qt dynamic library installed (or later upgrade to one), your program will still work. This can save much time, network, disk,

and memory resources and administration work, for both you and the users of your Qt-based programs.

 

 

 

分享到:
评论

相关推荐

    KVM虚拟化技术基础与实践全套课件.pptx

    - **硬件通用性**:为了确保跨平台兼容性,硬件设计需考虑通用性。 ##### 2. 操作系统层面 - **硬件与用户的桥梁**:操作系统作为硬件与上层用户间的中介,负责提供驱动程序等接口,使用户能够使用硬件资源。 - **...

    虚拟化技术十四问讨论虚拟化技术的发展前景

    ### 虚拟化技术十四问:探讨虚拟化技术的发展前景 #### 一、服务器虚拟化简介 **服务器虚拟化**是一种将物理服务器资源抽象化为逻辑资源的技术,其核心目的是提高服务器资源的利用率和灵活性。它通过创建一个或多...

    虚拟化技术在云计算中的研究进展.pdf

    3. **更广泛的集成能力**:为了更好地支持混合云和多云环境,未来的虚拟化技术将具备更强的集成能力和跨平台兼容性。 4. **更高效的资源利用**:随着硬件技术的进步,未来的虚拟化技术将能够更好地利用物理资源,...

    存储虚拟化技术白皮书精选

    2. **云计算平台**:云服务提供商利用存储虚拟化技术来提供弹性伸缩的存储服务,满足不同用户的需求变化。 3. **数据备份与恢复**:通过虚拟化技术简化备份流程,提高数据恢复的速度和效率。 4. **数据迁移**:在不...

    行业分类-设备装置-基于硬件虚拟化的跨平台安全保护系统.zip

    5. 跨平台兼容性:无论是在Windows、Linux还是其他操作系统上,硬件虚拟化技术都能提供一致的安全保护,使得设备装置能在各种环境下保持安全。 6. 灵活部署:虚拟化环境使得应用程序和系统的部署更加灵活,可以根据...

    虚拟化技术详解文档doc

    应用程序虚拟化则主要涉及软件层面,通过仿真、模拟或解释技术,使得应用程序能够在不同平台或不兼容环境中运行,无需关心底层操作系统。这种技术在跨平台软件部署和移动办公场景中尤为常见。 总的来说,虚拟化技术...

    华三纵向虚拟化技术学习

    - **兼容性**:IRF3支持PE到CB上行、服务器跨PE上行等多种冗余模式,并且保留了与802.1BR的兼容性。 #### 五、应用场景 - **大型数据中心**:IRF3技术非常适合用于构建大规模的数据中心网络,支持大容量的二层网络...

    虚拟化平台测试

    综上所述,虚拟化平台测试涵盖了从资源管理、高可用性、灾难恢复到操作系统兼容性等多个方面,确保了虚拟化技术能够在不同的业务场景中稳定高效地运行。通过详尽的测试,信息技术分公司不仅能够验证产品功能,还能够...

    从虚拟化到云原生——容器技术的发展史.pdf

    容器技术是虚拟化技术的一种新兴形态,它与虚拟机技术相比,不虚拟化整个操作系统,而是通过操作系统级别的虚拟化,实现了轻量级的隔离。容器技术在云原生(CloudNative)环境中扮演了核心角色,因为它不仅提供了...

    虚拟化技术在医院信息化建设的作用.docx

    6. **促进信息系统的集成和标准化**:虚拟化技术有助于构建统一的信息管理系统,减少软件和硬件之间的兼容性问题,促进不同系统的无缝集成。 综上所述,虚拟化技术在医院信息化建设中的应用不仅提升了医院的工作...

    1服务器虚拟化技术.doc

    应用虚拟化则更侧重于在主操作系统上提供一个虚拟环境,使得用户可以运行与主系统不同的应用程序,实现跨平台的应用兼容性。 总的来说,服务器虚拟化技术已经成为现代数据中心的关键技术,它通过优化资源分配和管理...

    云计算虚拟化技术与应用-课后习题 .pdf

    【云计算虚拟化技术与应用】 云计算虚拟化技术是现代IT基础设施的重要组成...不同的虚拟化技术各有特点,如VMware的高性能、Microsoft Hyper-V的广泛兼容性和Citrix XenServer的开源特性,都为用户提供了丰富的选择。

    虚拟化技术之十大误区

    #### 一、虚拟化技术概述与分类 虚拟化技术是指在计算机系统中使用软件手段来模拟或扩展硬件功能的一种技术。它的核心目的是将物理资源抽象化,使其能够更加灵活地分配和管理。在IT行业中,虚拟化可以大致分为以下...

    云计算中的虚拟化关键技术应用.pdf

    裸金属架构是指虚拟化技术直接在物理硬件上运行,虚拟机直接管理和使用硬件资源,这种架构下的虚拟化技术效率更高,但是兼容性和移植性较差。寄居架构则是在宿主操作系统之上运行虚拟化软件,虚拟机通过宿主操作系统...

    计算机虚拟化技术世界.pdf

    此外,像Java虚拟机(JVM)这样的软件层虚拟机,允许在不同操作系统上运行跨平台的Java应用程序,它模拟了一个完整的执行环境,隐藏了底层操作系统的差异,实现了软件的跨平台兼容性。 总之,计算机虚拟化技术通过...

    虚拟化技术在云计算中的应用初探

    对于应用程序而言,虚拟化提供了统一的操作环境,消除了不同硬件平台间的兼容性问题,使得软件可以无缝地运行在任何支持虚拟化的硬件上。此外,虚拟化还能根据应用的需求动态调整资源分配,例如,当某个应用负载增加...

    基于硬件虚拟化的反调试技术

    相较于传统的软件级反调试技术,这种方法具有更高的安全性、更低的性能损耗以及更好的跨平台兼容性。随着硬件技术的不断进步和发展,基于硬件虚拟化的反调试技术有望在未来得到更加广泛的应用和发展。

    ChatGPT技术的跨平台与跨设备应用.docx

    跨平台兼容性** 不同的操作系统和硬件平台之间可能存在差异,这对ChatGPT技术的跨平台应用提出了挑战。开发者需要考虑如何在多种环境中保持一致的用户体验。 #### 六、结论 综上所述,ChatGPT技术在跨平台与跨...

Global site tag (gtag.js) - Google Analytics