導航:首頁 > 操作系統 > 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相關的資料

熱點內容
java課表 瀏覽:551
如何在pdf裡面修改 瀏覽:925
橙光製作器檔案框在哪個文件夾 瀏覽:989
php如何抓取網頁數據 瀏覽:640
計數器單片機 瀏覽:964
游戲aoi演算法 瀏覽:844
phpmysqlint 瀏覽:912
怎麼從appstore商城買東西 瀏覽:184
大秀直播平台源碼 瀏覽:424
java視屏 瀏覽:934
電腦中如何給程序加密 瀏覽:240
java排序容器 瀏覽:942
職稱證書在哪個app下載 瀏覽:362
四九演算法算男女 瀏覽:659
javawindows8 瀏覽:496
2021世界程序員節 瀏覽:484
php翼支付 瀏覽:882
盈通伺服器ip地址 瀏覽:790
3des演算法的c語言實現 瀏覽:873
網上怎樣購買伺服器地址 瀏覽:815