导航:首页 > 操作系统 > qmllinux

qmllinux

发布时间:2024-04-04 07:15:31

linux上qml的性能怎么这么低

"在windows下编译的程序在linux下用wine运行的效率都比在linux上编译的原生程序快好多倍"
服了你了。
linux下的firefox比windows下的快
处理大量数据,用OpenOffice,还是linux下的快。

Ⅱ 如何在Windows下构建ARM Linux QT开发环境

准备工作:
首先,最不可思议的,是要在Linux下把QT编译一遍,因为库都是一样的,需要的就是一些Windows下的qmake、moc、uic之类的工具而已。因为QT源码很多地方不能在Windows下面交叉编译通过,虽然我改了一些代码和配置(一会儿我贴出补丁来),但我只用它编译了qtbase、qtdeclarative这两个模块和qttools模块中的一部分。
Linux下的编译可以参照我之前写的这篇文章。参考配置:
开发包:
./configure -extprefix /opt/qt/5.2.1/arm -prefix /usr -plugindir /usr/lib/qt/plugins -importdir /usr/lib/qt/imports -qmldir /usr/lib/qt/qml -make libs -xplatform linux-arm-gnueabi-g++ -opengl es2 -confirm-license -opensource -xcb -xinput2 -nomake examples -nomake tests -qt-zlib -qt-xcb -dbus -largefile -cups -no-fontconfig -glib -gtkstyle -qt-freetype -sysroot /opt/sysroot-arm -mysql_config /opt/sysroot-arm/usr/bin/mysql_config -v
运行库:
./configure -prefix /usr -plugindir /usr/lib/qt/plugins -importdir /usr/lib/qt/imports -qmldir /usr/lib/qt/qml -make libs -xplatform linux-arm-gnueabi-g++ -opengl es2 -confirm-license -opensource -xcb -xinput2 -nomake examples -nomake tests -qt-zlib -qt-xcb -dbus -largefile -cups -no-fontconfig -glib -gtkstyle -qt-freetype -sysroot /opt/sysroot-arm -mysql_config /opt/sysroot-arm/usr/bin/mysql_config -v
做完这一步,你获得两样东西,sysroot和linux下的ARM QT开发文件。sysroot是编译QT之前,用Buildroot做的开发用根目录。这两个东西都要拷贝到Windows里,因为Windows不支持符号连接,拷贝需要需要去掉这些连接,这么做:
cp [源目录] [目标目录] -Lr
第二,需要一个Windows下模拟Linux环境的东西和编译器,我用的是MSYS和MinGW,因为他们编译出来的程序比Cygwin快。在这里可以找到:http://www.mingw.org/。
第三,需要Linaro ARM GCC编译器,Windows版本的。在这里可以找到:http://www.linaro.org/downloads/
第四,需要python,Windows版本的。在这里可以找到:https://www.python.org/downloads/
下载、安装,然后在MSYS根目录的/etc/profile里面export PATH=$PATH:[Python安装目录]
第五,需要pkg-config,Windows版本的,这个比较麻烦,需要下载以下三个文件,并提取出我们需要的东西:
http://ftp.acc.umu.se/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip
(提取pkg-config.exe)
http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.28/glib_2.28.8-1_win32.zip
(提取libglib-2.0-0.dll)
http://ftp.acc.umu.se/pub/gnome/binaries/win32/dependencies/gettext-runtime_0.18.1.1-2_win32.zip (提取intl.dll)
把他们都放到MSYS的bin目录下,然后给pkg-config.exe做一个脚本pkg-config,因为下载的pkg-config.exe比较蠢,在同时指定PKG_CONFIG_SYSROOT_DIR和PKG_CONFIG_LIBDIR这两个环境变量的时候,第一个cflags会输出两次PKG_CONFIG_SYSROOT_DIR。这么做这个脚本:
#!/bin/sh
pushd / > /dev/null
ROOTDIR=`pwd -W 2>/dev/null`
popd > /dev/null
SYSROOT=$PKG_CONFIG_SYSROOT_DIR
pkg-config.exe "$@" | sed "s#$SYSROOT$SYSROOT#$SYSROOT#g" | sed "s#$ROOTDIR##g"
最后去掉$ROOTDIR前缀是为了和Linux Makefile兼容,同时也不会影响在make中的地址转换,最后,QT源码和我的补丁。
我的补丁如下:
diff -Naur qt-everywhere-opensource-src-5.2.1-old/qtbase/configure qt-everywhere-opensource-src-5.2.1/qtbase/configure
--- qt-everywhere-opensource-src-5.2.1-old/qtbase/configure 2014-02-02 04:37:23 +0800
+++ qt-everywhere-opensource-src-5.2.1/qtbase/configure 2014-08-27 22:34:47 +0800
@@ -4022,6 +4022,10 @@
done

(cd "$outpath/qmake"; "$MAKE") || exit 2
+ if [ -e "$outpath/bin/qmake.exe" ]; then
+ echo '#!/bin/sh' > "$outpath/bin/qmake"
+ echo "$outpath/bin/qmake.exe" '"$@"' "-unix" >> "$outpath/bin/qmake"
+ fi
fi # Build qmake

echo "Running configuration tests..."
@@ -4091,9 +4095,9 @@
# when xcompiling, check environment to see if it's actually usable
if [ -z "$PKG_CONFIG_LIBDIR" ]; then
if [ -n "$CFG_SYSROOT" ] && [ -d "$CFG_SYSROOT/usr/lib/pkgconfig" ]; then
- PKG_CONFIG_LIBDIR=$CFG_SYSROOT/usr/lib/pkgconfig:$CFG_SYSROOT/usr/share/pkgconfig
+ PKG_CONFIG_LIBDIR=$CFG_SYSROOT/usr/lib/pkgconfig\;$CFG_SYSROOT/usr/share/pkgconfig
if [ -n "$GCC_MACHINE_DUMP" ]; then
- PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:$CFG_SYSROOT/usr/lib/$GCC_MACHINE_DUMP/pkgconfig
+ PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR\;$CFG_SYSROOT/usr/lib/$GCC_MACHINE_DUMP/pkgconfig
fi
export PKG_CONFIG_LIBDIR
echo >&2 "Note: PKG_CONFIG_LIBDIR automatically set to $PKG_CONFIG_LIBDIR"
diff -Naur qt-everywhere-opensource-src-5.2.1-old/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf qt-everywhere-opensource-src-5.2.1/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
--- qt-everywhere-opensource-src-5.2.1-old/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 2014-02-02 04:37:37 +0800
+++ qt-everywhere-opensource-src-5.2.1/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 2014-08-28 00:08:34 +0800
@@ -11,14 +11,21 @@
include(../common/g++-unix.conf)

# modifications to g++.conf
-QMAKE_CC = arm-linux-gnueabi-gcc
-QMAKE_CXX = arm-linux-gnueabi-g++
-QMAKE_LINK = arm-linux-gnueabi-g++
-QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++
+QMAKE_CC = arm-linux-gnueabihf-gcc
+QMAKE_CXX = arm-linux-gnueabihf-g++
+QMAKE_LINK = arm-linux-gnueabihf-g++
+QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++

# modifications to linux.conf
-QMAKE_AR = arm-linux-gnueabi-ar cqs
-QMAKE_OBJCOPY = arm-linux-gnueabi-obj
-QMAKE_NM = arm-linux-gnueabi-nm -P
-QMAKE_STRIP = arm-linux-gnueabi-strip
+QMAKE_AR = arm-linux-gnueabihf-ar cqs
+QMAKE_OBJCOPY = arm-linux-gnueabihf-obj
+QMAKE_NM = arm-linux-gnueabihf-nm -P
+QMAKE_STRIP = arm-linux-gnueabihf-strip
+
+# support for OpenGL
+QMAKE_LIBS_EGL = -lEGL
+QMAKE_LIBS_OPENGL_ES1 = -lGLES_CM
+QMAKE_LIBS_OPENGL_ES2 = -lGLESv2
+#QMAKE_LIBS +=
+
load(qt_config)
diff -Naur qt-everywhere-opensource-src-5.2.1-old/qtbase/qmake/generators/makefile.cpp qt-everywhere-opensource-src-5.2.1/qtbase/qmake/generators/makefile.cpp
--- qt-everywhere-opensource-src-5.2.1-old/qtbase/qmake/generators/makefile.cpp 2014-02-02 04:37:29 +0800
+++ qt-everywhere-opensource-src-5.2.1/qtbase/qmake/generators/makefile.cpp 2014-08-26 13:53:15 +0800
@@ -1161,8 +1161,8 @@

QString srcf = (*sit).toQString();
QString dstf = (*oit).toQString();
- t << escapeDependencyPath(dstf) << ": " << escapeDependencyPath(srcf)
- << " " << escapeDependencyPaths(findDependencies(srcf)).join(" \\\n\t\t");
+ t << escapeDependencyPath(dstf).replace(QRegExp("\\\\"), "/") << ": " << escapeDependencyPath(srcf).replace(QRegExp("\\\\"), "/")
+ << " " << escapeDependencyPaths(findDependencies(srcf)).replaceInStrings(QRegExp("\\\\"), "/").join(" \\\n\t\t");

ProKey comp, cimp;
for(QStringList::Iterator cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit) {
@@ -3346,6 +3346,8 @@
QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QString &src, const QString &dst)
{
QString ret;
+ QString src_p = src;
+ QString dst_p = dst;
if (project->isEmpty(replace_rule)
|| project->isActiveConfig("no_sed_meta_install")) {
ret += "-$(INSTALL_FILE) \"" + src + "\" \"" + dst + "\"";
@@ -3362,7 +3364,7 @@
+ "," + windowsifyPath(replace.toQString()) + ",gi");
}
}
- ret += " \"" + src + "\" >\"" + dst + "\"";
+ ret += " \"" + src_p.replace(QRegExp("\\\\"), "/") + "\" >\"" + dst_p.replace(QRegExp("\\\\"), "/") + "\"";
}
return ret;
}

struct TermChain {
TermChain(PatternTerm term)
diff -Naur qt-everywhere-opensource-src-5.2.1-old/qttools/src/linguist/lrelease/lrelease.pro qt-everywhere-opensource-src-5.2.1/qttools/src/linguist/lrelease/lrelease.pro
--- qt-everywhere-opensource-src-5.2.1-old/qttools/src/linguist/lrelease/lrelease.pro 2014-02-02 04:37:57 +0800
+++ qt-everywhere-opensource-src-5.2.1/qttools/src/linguist/lrelease/lrelease.pro 2014-08-28 10:42:55 +0800
@@ -1,4 +1,7 @@
option(host_build)
+
+win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x
+
QT = core-private
DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII

diff -Naur qt-everywhere-opensource-src-5.2.1-old/qttools/src/linguist/lupdate/lupdate.pro qt-everywhere-opensource-src-5.2.1/qttools/src/linguist/lupdate/lupdate.pro
--- qt-everywhere-opensource-src-5.2.1-old/qttools/src/linguist/lupdate/lupdate.pro 2014-02-02 04:37:57 +0800
+++ qt-everywhere-opensource-src-5.2.1/qttools/src/linguist/lupdate/lupdate.pro 2014-08-28 10:46:59 +0800
@@ -1,4 +1,7 @@
option(host_build)
+
+win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x
+
QT = core-private

qtHaveMole(qmldevtools-private) {
接下来开始配置:

其中-extprefix定义安装位置,在编译完以后可以改,一会儿说;-prefix、-plugindir、-importdir、-qmldir定义的位置是目标板上的位置,加双斜杠是为了防止MSYS翻译这些路径成MSYS的路径,其他的设定与Linux下的编译没有不同。Linux下编译的sysroot可以拷贝到例如:E:/MinGW/opt/sysroot-arm。
然后编译
make mole-qtbase
make mole-qtdeclarative
cd qttools/src/linguist
../../../qtbase/bin/qmake.exe -unix linguist.pro
make
编译的时候可能会有几个库有链接错误,找不到一大堆gl、egl打头的函数,这是因为相应的Makefile里面的LIBS没有自动加上-lEGL -lGLES_CM -lGLESv2;但是正式使用qmake的时候不会,很奇怪;因为也就几个地方,出问题了手工加一下吧,我没去查原因改代码。
编译linguist的时候可能会遇到这个问题:http://qt-project.org/forums/viewthread/33370,按里面说的处理。
编译完了以后,把下列文件拷贝到Linux下编译的ARM QT开发包的bin目录中去:

然后,删掉对应的ARM QT开发包的bin目录中没有exe后缀的文件,那些是Linux下的。
最后一步,确保安装路径正确,也就是说,如果配置Windows下QT的时候设定-extprefix E:/MinGW/opt/qt/5.2.1/arm,那就要把替换过exe文件的ARM QT开发包放到这个位置,如果路径改了,可以用二进制搜索工具去qmake.exe中替换这个字串。
补充一下关于调试的问题,其实不是很关键。
在使用Debug模式编译的时候,最后会出现如下提示:
warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB. Attempting to continue with the default i386 settings.
这是因为在mkspecs/features/unix/gdb_dwarf_index.prf中,有这样一段:
QMAKE_GDB_INDEX += \
test \$\$(gdb --version | sed -e \'s,[^0-9][^0-9]*\\([0-9]\\)\\.\\([0-9]\\).*,\\1\\2,;q\') -gt 72 && \
gdb --nx --batch --quiet -ex \'set confirm off\' -ex \"save gdb-index $$QMAKE_GDB_DIR\" -ex quit \'$(TARGET)\' && \
test -f $(TARGET).gdb-index && \
$$QMAKE_OBJCOPY --add-section \'.gdb_index=$(TARGET).gdb-index\' --set-section-flags \'.gdb_index=readonly\' \'$(TARGET)\' \'$(TARGET)\' && \
$$QMAKE_DEL_FILE $(TARGET).gdb-index || true

很显然,这段代码把调试用的GDB默认为“gdb”了,所以应该改成你用的gdb,比如arm-linux-gnueabihf-gdb。另外,这里的sed对GDB版本的判断,无法识别像“GNU gdb (Sourcery CodeBench Lite 2014.05-29) 7.7.50.20140217-cvs”这样的版本信息的,只能识别像“GNU gdb (GDB) 7.6.1”这样的版本信息,所以你有可能看不到刚才那段提示。想解决,要么重新写一段sed的正则表达式,要么直接就把这个test ... -gt 72删掉。

Ⅲ 国产操作系统开放麒麟0.7体验版正式发布

国产操作系统开放麒麟0.7体验版正式发布

国产操作系统开放麒麟0.7体验版正式发布,官方介绍,openKylin 0.7 基于 Linux 5.15 内核和其他开源组件进行构建,国产操作系统开放麒麟0.7体验版正式发布。

国产操作系统开放麒麟0.7体验版正式发布1

6月24日,openKylin社区正式发布,这也是中国首个桌面操作系统根社区,旨在在开源、自愿、平等、协作的基础上,通过开源培野衫、开放的社区合作,构建桌面操作系统顶级开源社区。

7月22日,桌面操作系统根社区openKylin(开放麒麟)的首个体验版正式发布openKylin 0.7。

openKylin 0.7基于Linux 5.15内核和其他开源组件进行构建,目标是每一行代码都自主创新”。

默认配腔搭载UKUI 3.1桌面环境,自带和印”、寻光”两套系统主题,支持wayland,支持PC、平板双模式,并集成了一系列稳定版本的基础库、图形开发库、SDK开发包。

openKylin 0.7版本特性盘点:

1、内核

在Linux 5.15内核原有的特性之上,进行了深入优化:

进一步优化对Intel第 12 代 CPU 的支持;

增加对Intel近一两年推出的集显的支持;

改进RISC-V支持;

修复多款整机的兼容性问题。

2、基础组件库

集成一系列稳定版本的基础库,如glibc 2.31、GCC 9.3、Python 3.8.2等。

集成图形开发库Qt 5.15 LTS版本,支持3D图形抽象API、Qt Quick 3D、Qt Design Studio 1.5,同时改进qmllint工具,支持客户端/自定义窗口装饰。

集成麒麟软件研发的SDK,将应用层、基础层相关接口和系统层接口进行封装,为在openKylin桌面操作系统上进行应用开发提供多种工具与接口,而且同一开发套件兼容多种系统架构,降低开发成本。

3、桌面环境

UKUI 3.1桌面环境主要特性如下:

默认开启wayland支持,提供更流畅的渲染、更好的HiDPI支持,充分利用EGL硬件加速,降低功耗,提升效率。

默认提供平板模式支持,通过状态管理服务、多端融合的窗口管理、手势管理、应用生命周期管理,脊困从底层服务到上层应用初步形成一套PC、平板多模式融合的解决方案,大大提升了用户在触摸屏以及二合一平板等产品上的操作体验。

4、关键应用

集成丰富的关键应用,从功能性和易用性方面提升用户体验,例如:

支持多种格式的图片预览和打印;

支持音频裁剪后自定义输出,多种格式视频播放;

支持基于openKylin查看天气、日历,设置闹钟,制作启动盘等多种便捷操作;

支持触控手势;

支持多网卡切换;

支持5G Wi-Fi,访问速度更快。

openKylin社区成立以来,已有46个企业加入,包括操作系统厂商、CPU厂商、GPU厂商、整机厂商、软件厂商等,并成立了14个SIG组。

目前,openKylin已构建开源基础设施全生命周期自动化平台,成员只需一键提交,可自动化执行代码检测、编译、构建全流程,提升参与者的编码效率。

同时,openKylin打造了一套从代码到镜像的一体化平台,从码云到OKBS(编译平台),再到OKIF(镜像构建平台),无缝支撑从上游代码到生成镜像的整体流程,实现代码自主选型、软件包自主编译、镜像自主生成的全栈式需求。

openKylin社区计划每年发布一个操作系统版本,并不定期推送更新。

国产操作系统开放麒麟0.7体验版正式发布2

据 openKylin 官方发布,今天桌面操作系统根社区 openKylin(开放麒麟)首个体验版 ——openKylin 0.7 发布。

官方介绍,openKylin 0.7 基于 Linux 5.15 内核和其他开源组件进行构建,向“每一行代码都自主创新”的目标迈进。同时,此版本默认搭载 UKUI 3.1 桌面环境,内置“和印”、“寻光”两套系统主题,提供 wayland 支持和平板模式支持,并集成一系列稳定版本的基础库、图形开发库和 SDK,为用户带来良好使用体验。

openKylin 0.7 内核进一步优化对 Intel 第 12 代 CPU 的支持;增加对 Intel 近一两年推出的集显的支持;改进 RISC-V 支持;修复多款整机的兼容性问题。

openKylin 0.7 搭载最新 UKUI 3.1 桌面环境,默认开启 wayland 支持,提供更流畅渲染以及更好 HiDPI 支持,充分利用 EGL 硬件加速,降低功耗,提升效率;

默认提供平板模式支持,通过状态管理服务、多端融合的窗口管理、手势管理、应用生命周期管理,从底层服务到上层应用初步形成一套 PC、平板多模式融合的解决方案,提升用户在触摸屏以及二合一平板等产品上的操作体验。

麒麟官方表示,在版本发布周期规划上,openKylin 社区计划每年发布一个操作系统版本,并不定期推送更新。

openKylin 自 6 月成立以来,目前已有 46 个企业加入社区,包括操作系统厂商、CPU 厂商、GPU 厂商、整机厂商、以及软件厂商等,并成立了 14 个 SIG 组。

国产操作系统开放麒麟0.7体验版正式发布3

近日,openKylin官方发布,桌面操作系统根社区openKylin(开放麒麟)首个体验版 ——openKylin 0.7 发布。

众所周知,芯片和操作系统一直都是我们的短板弱项,而近年来一系列科技公司被制裁的事让更多人明白,核心技术一定要掌握在自己手中。近日,我国首个桌面操作系统开发者平台“开放麒麟”正式发布。据了解,该平台由国家工业信息安全发展研究中心等单位联合成立,将打造具有自主创新技术的开源桌面操作系统。

据报道,开放麒麟开发者平台将通过开放操作系统源代码的方式,让更多的'开发者共同参与国产开源操作系统的开发。简言之,“开放麒麟”其实就是国产桌面操作系统的开源根社区,在这个平台上,所有开发者都能参与开源代码的共建共享,并基于自主性需求完善应用产品的开发。

作为开发者的麒麟软件表示,openKylin 社区将充分利用其数十年的操作系统研发成果,与麒麟软件一起携手国家工信安全中心、普华基础软件、中科方德等十余家产业同仁共建openKylin 社区。

值得一提的是,麒麟软件是国产操作系统的龙头企业,旗下中标麒麟、银河麒麟就是麒麟软件基于 Linux 开发的商业操作系统,后者的社区版为 Ubuntu Kylin ,内置名为 kydroid 的安卓运行环境,可以运行部分安卓应用。

只有在操作系统等核心软硬件上实现完全自主可控,才能杜绝安全风险,实现真正的不受制于人。

阅读全文

与qmllinux相关的资料

热点内容
androidsleep函数 浏览:151
android内核代码下载 浏览:665
服务器如何添加墨迹 浏览:747
diglinux安装 浏览:279
虚拟机执行命令 浏览:444
cctv16奥林匹克频道加密播出 浏览:899
c盘微信文件夹隐私 浏览:229
asp压缩mdb 浏览:670
node开源论坛源码 浏览:10
单片机比手机芯片还贵 浏览:35
java课表 浏览:555
如何在pdf里面修改 浏览:929
橙光制作器档案框在哪个文件夹 浏览:991
php如何抓取网页数据 浏览:642
计数器单片机 浏览:967
游戏aoi算法 浏览:846
phpmysqlint 浏览:914
怎么从appstore商城买东西 浏览:186
大秀直播平台源码 浏览:426
java视屏 浏览:936