`

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

阅读更多

虚拟化:

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.

 

 

 

分享到:
评论

相关推荐

    360虚拟化安全管理系统产品与技术白皮书

    360虚拟化安全管理系统是一款针对于云数据中心的防护系统,具备极高的兼容性和强大的防护能力,为用户提供一套可跨多种平台、防护无死角的综合虚拟化安全解决方案。

    react-native-scroll-bottom-sheet:具有虚拟化支持的跨平台可滚动底页,60 FPS的本地动画并完全在JS land中实现

    滚动底表 具有虚拟化支持和完全本机动画的跨平台可滚动底表,与React Native的所有核心可滚动组件集成: , 和 。 而且,它与Expo 100%兼容。产品特点 虚拟化支持: FlatList和SectionList组件是一等公民,以及...

    VirtualBox-5.2.30-130521-Win

    多平台支持:VirtualBox在Windows、macOS、Linux等多个操作系统上运行,为用户提供了跨平台的虚拟化解决方案。 虚拟机创建:用户可以轻松创建多个虚拟机,模拟不同操作系统的环境,如Windows、Linux、macOS等,实现...

    Hades For Windows(HIDS/EDR)

    GoServer已合并新项目Hboat(跨平台): https://github.com/theSecHunter/Hboat基于Intel-x/d虚拟化技术,绕过PG保护做花式Hook,功能强大-系统无痕。基于微型过滤框架和注册回调,兼容性好/快速开发/接口完善。项目...

    苹果新的M1硬件上的语言和工具的兼容性-Swift开发

    苹果新的M1硬件上的语言和工具的兼容性苹果M1软件工程师的兼容性苹果新的M1硬件上的语言和工具的兼容性语言支持JavaScript / Node.js / Python / Ruby PHP Java,Scala,Groovy .NET Core C,C ++,Obj -C和Swift Go...

    项目需求服务器采购.doc

    " " "功能虚拟化、虚拟应用防火墙、虚拟应用负载均衡等功能组件均为 " " "同一厂商品牌提供,保障平台的扩展性和兼容性(需提供产品功能 " " "截图,并加盖厂商公章) " " "计算、存储、网络资源能够在同一管理平台...

    项目需求服务器采购(1).doc

    " " "功能虚拟化、虚拟应用防火墙、虚拟应用负载均衡等功能组件均为 " " "同一厂商品牌提供,保障平台的扩展性和兼容性(需提供产品功能 " " "截图,并加盖厂商公章) " " "计算、存储、网络资源能够在同一管理平台...

    VMware Workstation Pro 12.0.0 Build 2985596 - 64bit [ENG] [Serial]

    Workstation 12 Pro 可提供跨 VMware 产品组合和跨不同平台的兼容性。利用 Workstation 12 Pro,您可以创建能够跨 VMware 产品组合运行的虚拟机,或创建能够在 Horizon FLEX 和 Workstation Player 中使用的受限...

    大数据的存储管理技术.doc

    HDFS采用了冗余数据存储,增强了数据可靠性,加快了数据传输速度,除此 之外,HDFS还具有兼容的廉价设备、流数据读写、大数据集、简单的数据模型、强大的 跨平台兼容性等特点。但HDFS也存在着自身的不足,比如不适合...

    phpb2b平台

    网站程序支持多种平台,可以运行于Linux/FreeBSD/Unix 及微软 Windows 2000/2003/2008 等各种操作系统环境下,当购买开源套餐时,还方便用户进行二次开发,同时网站系统跟一些社区结合兼容性好,此举可以提高用户的...

    WSL-CentOS7.9镜像

    兼容性优异:WSL提供了对Linux二进制文件的原生支持,与Windows系统紧密结合。您可以在Windows上运行各种Linux工具和脚本,享受跨平台的无缝体验。 安全可靠:我们的WSL CentOS 7.9镜像经过精心优化和测试,确保...

    C#微软培训资料

    18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间成员速查.269 参 考 资 料 .300 <<page 4>> page begin==================...

    minisharp:从C#子集到JavaScript的优化编译器

    有很多现有的C#到JavaScript编译器,但是它们专注于兼容性而不是生成紧凑的代码。 它们中的大多数也是专有的和/或仅Windows。 目标: 跨平台(使用 ) 可读的调试输出 源图 缩小 摇树 不断折叠 去虚拟化 内联 ...

    国内外主流的三维GIS软件

    结合了三维可视化技术与虚拟现实技术,完全再现管理环境下的真实情况,把所有管理对象都置于一个真实的三维世界中,真正做到了管理意义上的“所见即所得”。  特点:IMAGIS在数据管理上采用了矢量数据和栅格数据...

    苦菊OA协同办公系统 v2019 开源版.zip

    跨平台 支持多种服务器环境,支持 平台可运行在WINDOWS、 LIUNX 、UNIX等任何支持PHP MYSQL服务器环境的主机、虚拟主机、VPS以及云主机。 零风险实施部署 苦菊OA打破传统协同软件商业模式,打造轻型、易安装、易...

    天生创想OA协同OA办公系统V2017 PalmOACollaborativeOffice.rar

    2、跨平台:支持多种服务器环境,支持 平台可运行在WINDOWS、 LIUNX 、UNIX等任何支持PHP+MYSQL服务器环境的主机、虚拟主机、VPS以及云主机。 3、零风险实施部署:天生创想OA打破传统协同软件商业模式,打造轻型、...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    12.7.3跨平台数据迁移 12.7.4可传输表空间 12.7.5使用RMAN工具复制数据库 12.8本章小结 第13章 RAC恢复 13.1恢复技术基础 13.1.1恢复解决方案 13.1.2 SCN时间机制 13.1.3日志线程与联机Redo日志 13.1.4 ...

    灾难恢复领域的金牌标准 Symantec System Recovery 2013 R2 11.1.7z

    与其他技术不同的是,Symantec System Recovery 还可提供跨平台物理到虚拟 (P2V) 及虚拟到虚拟 (V2V) 恢复,使之成为物理和虚拟环境的完美补充。 灾难恢复领域的金牌标准 Symantec System Recovery 中文版灾难恢复...

    LNMP/Nginx 虚拟主机面板 AMH v5.0.zip

    03) 安全: 安全/兼容模式可自由切换,安全模式不同虚拟主机之间互不影响,避免跨站攻击,让服务器安全性能倍增。 04) 独立: 简易全局管理与及支持不同主机进行独立运行维护。 05) 备份: 数据无忧保护,支持即时、...

    building_storage_networks_chsSAN存储区域网络 .rar

    至少,这些解决方案必须支持广泛的服务器平台,包括传统的支持办公用的服务器,因此,把存储管理员从兼容性的担忧中解放出来。 方案也必须在容量、性能和可用性方面具有可扩展性。虽然每个用户都可能说,他们需要...

Global site tag (gtag.js) - Google Analytics