• 1497阅读
  • 4回复

关于Qt国产化系统开发的几点总结 [复制链接]

上一主题 下一主题
离线liudianwu
 

只看楼主 倒序阅读 楼主  发表于: 2022-03-01

随着国产化的兴起,各种国产系统和国产数据等逐渐进入开发者的世界,科普几个要点。
- 中标麒麟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数据库插件也是能够连接到人大金仓数据库的。
- 以上未必完全正确,欢迎各位指正。
4条评分好评度+1贡献值+1金钱+10威望+1
20091001753 好评度 +1 - 2022-03-01
20091001753 贡献值 +1 - 2022-03-01
20091001753 威望 +1 - 2022-03-01
20091001753 金钱 +10 - 2022-03-01
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线fsu0413

只看该作者 1楼 发表于: 2022-03-02
主要影响二进制兼容的是C库,而常规的GNU/Linux发行版均使用GNU libc(glibc)作为C库,这保证了不同GNU/Linux发行版之间的二进制兼容性。

一个非常明显的例子就是安卓,虽然也是Linux发行版,但是它不使用GNU libc,而是使用谷歌自己的bionic。
正常情况下安卓的程序需要为安卓单独编译才可以运行,为安卓编译的程序不能运行在其他Linux发行版上。
不过使用chroot,在安卓之上建立一个使用glibc的容器,就可以把其他发行版使用的二进制文件直接放在容器里运行。

还有其他的发行版使用其他的C库,比如uclinux使用uclibc,openwrt使用musl,等等。
离线clickto

只看该作者 2楼 发表于: 04-25
大佬,你说关于gcc4.9的问题,请问是基于x86还是arm平台?
我现在在麒麟下编译的软件,在uos下是有兼容性问题,两者都是基于飞腾的cpu(飞腾d2000),但是系统不同,且系统源中默认提供的qt版本不同,uos中的是5.11,麒麟中是5.12。
离线fsu0413

只看该作者 3楼 发表于: 04-25
回 clickto 的帖子
clickto:大佬,你说关于gcc4.9的问题,请问是基于x86还是arm平台?
我现在在麒麟下编译的软件,在uos下是有兼容性问题,两者都是基于飞腾的cpu(飞腾d2000),但是系统不同,且系统源中默认提供的qt版本不同,uos中的是5.11,麒麟中是5.12。 (2024-04-25 22:32) 

不仅Qt版本会有兼容性问题,系统的各个组件都是一样会有类似这种问题
比如你说的这两个系统,假设uos的libc / libx11 / freetype 等等这些是更新的版本的话,两边互相编都是兼容不了的

离线clickto

只看该作者 4楼 发表于: 04-25
对,现在就是很麻烦的,每个版本都需要编译一份。所谓国产化系统,同样碎片太严重的,所基于的发行版各不相同,glibc是个大问题!!!
快速回复
限100 字节
 
上一个 下一个