教你你在。

访客 240 0

在2025年春节期间,deepseek 引发的人工智能热潮依然炙热。各大巨头如百度、腾讯、阿里纷纷将 deepseek 整合进他们的产品中,而更多的竞争者也推出了自己的大模型,声称已经超越了 deepseek。面对这波接一波的消息,仿佛我们的世界即将被 ai 颠覆:ai 公务员、deepseek 推理、一体机 ai 智能体、裁员风波等,消息满天飞,似乎人类社会一夜之间将发生翻天覆地的变化。

作为开发者,我自然也会关注与 AI 相关的资讯。然而,信息量大了,心中难免有些困惑:一方面是 AI 的飞速进展,似乎一夜之间就能取代人类;另一方面,我又被工作中的具体问题所困扰。这段时间没有更新公众号,就是因为工作的影响。在这期间,我一直被浏览器的系统问题搞得焦头烂额,实在没有心思去写文章。

说到底,我碰到的就是大多数 C/C++ 程序员不愿面对的兼容性难题,特别是在国产化替代的浪潮下,操作系统和硬件平台日益增多,兼容性问题已经成了绕不开的痛点。

随着国产化软硬件的崛起,开发者不得不面对更多的平台支持问题。就拿 CPU 架构来说,有 x86(x64)、龙芯(LoongArch64、MIPS)、申威(SW64)、ARM(飞腾、华为麒麟等),操作系统则有 UOS(包括 deepin)和麒麟(包括 OpenKylin 等),不同版本的操作系统也在不断变化,像 UOS 有 1050、1060、1070 等版本。只要稍一数,就能有几十种软硬件平台的组合。

通常情况下,操作系统和系统库对跨平台的支持做得还不错,作为应用程序开发者,一般不会针对所有平台开发,而是选择主流平台组合,这样就能避免大多数兼容性问题。但是,如果碰到问题,就会是比较棘手的难题。因为同样的代码,在不同的平台上表现不一样,甚至崩溃,一般需要系统开发者配合一起查找问题。

说实话,尽管 Windows 常被吐槽,但从兼容性上看,Windows 做得还是相当不错的。而 Linux 系统版本众多,经常更新,导致兼容性相对较差。

说到兼容性,就不得不提 ABI(应用二进制接口)。ABI 兼容性是指不同版本的库之间保持一致性,确保旧版程序能够在新版库中正常运行。如果 ABI 不兼容,程序很可能会出现运行不正常的问题。

ABI 兼容动态库的 ABI 兼容性是指不同版本的动态库能保持一致的二进制接口,使得旧版本编译的程序能在新版库环境下正常运行。下面我们来看一下 ABI 兼容的几个关键点:

ABI 定义内容:ABI 包含了数据类型的大小、数据结构的内存布局、函数调用约定(参数传递、返回值处理)、符号命名规则、异常处理机制等。这些细节决定了程序如何正确地传递数据并接收返回值。动态库版本管理与符号版本控制:为了确保兼容性,很多动态库(如 glibc)采用符号版本控制机制。通过为每个符号赋予版本号,确保新旧版本共存时,程序会加载正确的版本。向后兼容性与 ABI:保持新版动态库在扩展功能时,不改变原有接口和行为,保持 ABI 向后兼容。开发者在更新库时,要确保原有接口不受影响。编译器与链接器的角色:编译时,程序根据动态库的头文件和符号信息生成调用代码,链接器会记录符号和版本信息,确保程序能在运行时加载正确的库。glibc 和 OpenSSL 在 ABI 兼容性方面做得很好,但问题在于,这些库变得越来越复杂,废弃的接口越来越多,导致库文件越来越大。于是,很多系统开始采用精简版的 C 库,例如 Android 使用 Bionic 库,BoringSSL 则从 OpenSSL 中分叉出来,删除了很多接口,但不提供 ABI 兼容。

由此可见,软件开发也是一个平衡的艺术,需要开发人员根据实际情况进行取舍。

sysroot 与系统兼容:sysroot 是嵌入式开发中引入的概念,指向一个目录,该目录模拟目标系统的根文件系统结构,包含了编译、链接、运行所需的头文件、库文件等。

在嵌入式开发中,开发者通常在一个平台上(如 x86 主机)进行开发,但目标平台可能是另一个架构(如 ARM)。由于平台架构不同,直接在主机上编译的程序无法在目标平台上运行,因此需要使用 sysroot 来确保编译的应用程序能够在目标系统上正常运行。

sysroot 的作用包括:

提供一致性:模拟目标系统的文件结构,确保编译器和链接器使用正确的库和头文件。支持交叉编译:sysroot 为目标平台提供专用的库路径,确保生成的可执行文件能够调用目标系统的资源。简化构建流程:通过 sysroot,开发者可以统一管理编译依赖,减少环境配置错误的风险。Chromium 构建与 sysroot:Chromium 构建系统提供了一个 use_sysroot 选项。当 use_sysroot 设置为 true 时,Chromium 会下载一个 Debian Bullseye 版本的 sysroot 作为编译环境,帮助构建符合“最低公共平台”标准的二进制文件,从而确保它们能够在多个发行版上运行,包括 Debian、Ubuntu、Deepin 等。

Bullseye 的库版本相对稳定,且被多个发行版支持,这使得通过它编译的二进制文件在新版系统中能够兼容运行。Chromium 构建系统会对库依赖和编译选项进行严格控制,避免引入最新系统才有的特性,确保兼容性。

然而,sysroot 也并非万能。虽然它能够解决很多兼容性问题,但也存在一些挑战。例如,浏览器在 ARM 架构下开启沙盒时会崩溃,最终通过升级 sysroot 来解决。随着操作系统和库版本不断更新,如何更新 sysroot 中的库,确保与目标系统保持一致,依然是一个挑战。

玲珑应用解决方案:玲珑应用(Linglong Application)是近年来在国产操作系统中逐步推广的一种应用包格式。关于玲珑应用的介绍请参考我之前的文章:

国产系统之如意玲珑[将 QT 应用程序打包成如意玲珑软件包](将 QT 应用程序打包成如意玲珑软件包)

这里说一说玲珑应用在解决系统兼容性方面的几个突出的优势:

跨平台兼容性:玲珑包可以包含完整的应用程序及其所需的库文件,避免了依赖系统底层库的版本不同而引发的兼容性问题。简化部署:用户只需下载一个玲珑包,就能够直接在目标操作系统上运行,不需要担心操作系统的版本、库文件等环境问题。系统资源隔离:玲珑包将应用程序和其依赖封装在一个独立的环境中,避免了与其他系统程序的冲突,提高了系统的稳定性。

结语:在人工智能如 DeepSeek 一样迅猛发展的今天,系统软件开发者依然在跨平台兼容性、系统库 ABI 兼容性和 sysroot 管理等问题上面临挑战。你在 DeepSeek,我在 deepin Coding,尽管我们的方向不同,但我们都在各自的领域努力探索、前行,我们都有光明的未来。

你在 DeepSeek,我在 deepin Coding

以上就是你在 DeepSeek,我在 deepin Coding的详细内容,更多请关注楠楠科技社其它相关文章!

标签: #我在 #你在 #Coding