首页| 论坛| 消息

标题:关于Qt国产化系统开发的几点总结
作者:liudianwu
日期:2022-03-01 08:13
内容:

随着国产化的兴起,各种国产系统和国产数据库等逐渐进入开发者的世界,科普几个要点。
- 中标麒麟neokylin基于fedora。
- 银河麒麟kylin早期版本比如V2基于freebsd,新版本V4、V10基于ubuntu。
- 优麒麟ubuntukylin就是ubuntu的汉化版本。
- deepin基于debian。
- uos基于deepin或者说是deepin的商业分支。
- ubuntu基于debian。
- linux界主要分两种内核系统,debian(ubuntu、deepin、uos、银河麒麟kylin等)和redhat(fedora、centos、中标麒麟neokylin、中兴新支点newstart等),分别对应apt-get和yum安装命令。绝大部分的linux系统都基于或者衍生自这两种系统。
- 理论上基于同一种系统内核的,在其上编译的程序可以换到另外的系统运行,前提是编译器版本一致,比如都是gcc4.9,在ubuntu14.04 64位用gcc4.9编译的Qt程序,是能够在uos 64位上运行的。
- 高版本编译器的系统一般能够兼容低版本的,比如你用gcc4.9编译的程序是能够在gcc7.0上运行,反过来不行。
- 意味着如果你想尽可能兼容更多的系统,尽量用低版本的编译器编译你的程序,当然要你的程序代码语法支持,比如c++11就要从gcc4.7开始才支持,如果你的代码用了c++11则必须至少选择gcc4.7版本及以上。
- 用Qt编写linux程序为了发布后的可执行文件可以兼容各种linux系统,只要在这两种内核(debian、redhat)的系统上用低版本的编译器比如gcc4.7编译qt程序发布即可。
- 2022-1-27补充:根据Qt官方安装包,发现基于redhat的gcc4.9编译器发布的,通用各种linux系统(亲测ubuntu各个版本、fedora、centos、deepin、uos、银河麒麟kylin、中标麒麟neokylin、中兴新支点newstart等),自己按照这个版本也亲测打包发布了亲测可用,我擦,redhat系统的也可以在debian系统跑。
- 2022-2-10补充:debian上静态编译的程序也可以在redhat系统跑,可能静态编译去掉了很多依赖吧。
- 国产人大金仓数据库用的是postgresql数据库改的,意味着你在Qt中用postgresql数据库插件也是能够连接到人大金仓数据库的。
- 以上未必完全正确,欢迎各位指正。


#1 [fsu0413 03-02 20:22]
主要影响二进制兼容的是C库,而常规的GNU/Linux发行版均使用GNU libc(glibc)作为C库,这保证了不同GNU/Linux发行版之间的二进制兼容性。
一个非常明显的例子就是安卓,虽然也是Linux发行版,但是它不使用GNU libc,而是使用谷歌自己的bionic。
正常情况下安卓的程序需要为安卓单独编译才可以运行,为安卓编译的程序不能运行在其他Linux发行版上。
不过使用chroot,在安卓之上建立一个使用glibc的容器,就可以把其他发行版使用的二进制文件直接放在容器里运行。
还有其他的发行版使用其他的C库,比如uclinux使用uclibc,openwrt使用musl,等等。
#2 [clickto 04-25 22:32]
大佬,你说关于gcc4.9的问题,请问是基于x86还是arm平台?
我现在在麒麟下编译的软件,在uos下是有兼容性问题,两者都是基于飞腾的cpu(飞腾d2000),但是系统不同,且系统源中默认提供的qt版本不同,uos中的是5.11,麒麟中是5.12。
#3 回 clickto 的帖子 [fsu0413 04-25 22:51]
clickto:大佬,你说关于gcc4.9的问题,请问是基于x86还是arm平台?
我现在在麒麟下编译的软件,在uos下是有兼容性问题,两者都是基于飞腾的cpu(飞腾d2000),但是系统不同,且系统源中默认提供的qt版本不同,uos中的是5.11,麒麟中是5.12。 (2024-04-25 22:32) 
不仅Qt版本会有兼容性问题,系统的各个组件都是一样会有类似这种问题
比如你说的这两个系统,假设uos的libc / libx11 / freetype 等等这些是更新的版本的话,两边互相编都是兼容不了的
#4 [clickto 04-25 23:26]
对,现在就是很麻烦的,每个版本都需要编译一份。所谓国产化系统,同样碎片太严重的,所基于的发行版各不相同,glibc是个大问题!!!
#5 回 fsu0413 的帖子 [swfeng 07-17 09:50]
fsu0413:主要影响二进制兼容的是C库,而常规的GNU/Linux发行版均使用GNU libc(glibc)作为C库,这保证了不同GNU/Linux发行版之间的二进制兼容性。
一个非常明显的例子就是安卓,虽然也是Linux发行版,但是它不使用GNU libc,而是使用谷歌自己的bionic。
正常情况下安卓的程序需要为安卓 .. (2022-03-02 20:22) 
您好,为什么C库不一样,就会造成兼容性?我的理解是,C库的函数接口应该都是一样的,另外在同一个平台CPU下,编译出来的机器语言应该也是一样的,所以这样不管用谁家的C库,理论上都应该是兼容的。
本人小白,希望大佬能指导下。

<< 1 2 >> (1/2)

回复 发表
主题 版块