pretty code

2023年8月23日 星期三

vcpkg path too long issue

好不容易完成每日計劃表,正準備開始我的 Kobo EInk-Bro 專案時,就遇到第一個問題。

雖然我需要 cross compiler,但我可以先在 Windows 下測試 ChatGPT 幫我寫好的 Qt 小程式,把大工作切成小工作是一件好習慣。

我在 C:\src\vcpkg 預設目錄下編譯 qt5-webengine 時,會出現以下錯誤:

CMake Warning at ports/qt5-webengine/portfile.cmake:5 (message):
  The qt5-webengine source was will be extracted to
  C:/src/vcpkg/buildtrees/qt5-webengine , which has more then 35 characters
  in length.

就像字面上意義說的,路徑名稱過長,印象中新 Windows 早就沒 255 這個限制了?

時間寶貴,我還在找殺死大衛朗基羅的兇手,懶得看它的 cmake 檔案在抱怨什麼,另外開一個 C:\vcpkg 路徑,重 build 所有函式庫。

由於編譯需要一點時間,等待結束後再來更新是否有解決?

2023/08/24 更新

總共花了 22 個小時編譯,辛苦都是值得的。另外,在回捲查看相關訊息時,似乎看到 qt5-webengine 對硬體有些要求,記錄一下!

Installing 37/37 qt5-webengine:x64-windows...
Building qt5-webengine:x64-windows...
-- qt5-webengine requires a lot of free disk space (>100GB), ram (>8 GB) and time (>2h per configuration) to be successfully build.
-- As such qt5-webengine is currently experimental.
-- If qt5-webengine fails post build validation please try manually reducing VCPKG_MAX_CONCURRENCY and open up an issue if it still cannot build.
-- If it fails due to post validation the successfully installed files can be found in C:/vcpkg/packages/qt5-webengine_x64-windows
-- and just need to be copied into C:/vcpkg/installed/x64-windows
-- Downloading https://sourceforge.net/projects/gnuwin32/files/gperf/3.0.1/gperf-3.0.1-bin.zip/download -> gperf-3.0.1-bin.zip...
-- Downloading https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi -> python-2.7.18.amd64.msi...
-- Found external ninja('1.10.2').
-- Downloading https://download.qt.io/archive/qt/5.15/5.15.10/submodules/qtwebengine-everywhere-opensource-src-5.15.10.tar.xz;https://mirrors.ocf.berkeley.edu/qt/archive/qt/5.15/5.15.10/submodules/qtwebengine-everywhere-opensource-src-5.15.10.tar.xz -> qtwebengine-everywhere-opensource-src-5.15.10.tar.xz...
-- Extracting source C:/vcpkg/downloads/qtwebengine-everywhere-opensource-src-5.15.10.tar.xz

目前雖然可以成功編譯出執行檔,但會抱怨找不到 QtWebEngineProcess.exe,稍微找了一下,位在下列這個路徑 C:\vcpkg\installed\x64-windows\tools\qt5,雖然過了這一關,執行時又會觸發 Exception,看起來跟找不到 locales 語言設定檔有關,快速 Google 一下,Qt5 使用 QtWebEngineProcess.exe 做為 WebView 的橋樑,故佈署時有些眉角要注意,我猜可能跟處理 request 或是跟 UI 渲染有關,一時半刻還沒時間處理,目前先這樣。


關關難過關關過,我對 C++ 函式庫早就免疫了,一次就能成功我才會嚇到XD

QtWebEngineProcess.exe 需要 qtwebengine_locales 這個資料夾並放在程式根目錄的 translations 資料夾裡,另外還需要一個 resources 的資料夾,可能是 vcpkg 沒有幫忙 handle 這塊,故不像 DLL 一樣會複製一份到我的編譯資料夾內,這也簡單,直接在 vcpkg 搜尋並複製到正確的位置即可。

事情還沒結束,好不容易可以執行起來,並沒如我預期的去瀏覽網頁並顯示在 QWebEngineView 元件上,看了一下 console,又有一個錯誤如下:

QOpenGLShader::compile(Fragment): ERROR: 4:1: 'textureSampler' : syntax error syntax error

*** Problematic Fragment shader source code ***
#version 110
#ifdef GL_KHR_blend_equation_advanced
#extension GL_ARB_fragment_coord_conventions : enable
#extension GL_KHR_blend_equation_advanced : enable
#endif
#define lowp
#define mediump
#define highp
#line 1
varying highp vec2 uv;uniform sampler2DRect textureSampler;uniform bool swizzle;uniform highp float opacity;void main() {   highp vec4 tmpFragColor = texture2DRect(textureSampler,uv);   tmpFragColor.a *= opacity;   gl_FragColor = swizzle ? tmpFragColor.bgra : tmpFragColor;}
***

這次倒真的是 Qt5 的鍋了,居然會跟 Intel 顯示卡有關,詳此網頁

這個問題已經在去年 09/14 修正,修正的版本是 5.15.11。

查了一下 vcpkg 維護的版本,居然是 5.15.10,有沒有這麼背呀?


再來我需要想想下一步要如何做了?

2023/08/25 更新

昨天下班前查了一下,vcpkg support list 中有 Qt6 版本可以安裝,名稱為 qtwebengine,只要針對這項安裝,其他相依 vcpkg  會幫你搞定,這也是我一直推薦在 Windows 下用 vcpkg 來管理 C++ 函式庫的原因,不用從一堆 README 中找到相關的編譯設定(雖然很多時候還是會有問題,但就只能 by 問題看 log 來解)。

早上滿心期待的要看到安裝成功的畫面,沒想到連一半都沒安裝完畢便又遇到 qtbase 安裝問題,從 log 中看到有此錯誤:

ERROR: C++11 <random> is required and is missing or failed to compile.

稍微 Google 一下,有人說是 Visual Studio 16 2019 generator is not supported.

我的媽呀,那篇文章是 2020 年的,現在都民國哪一年了,居然還有這個問題?

我決定跳去 Linux 作業環境了,不然猴年馬月我才能完成第一步,deadline 剩沒幾天了。

順帶一提,Qt 似乎開始被很多人不爽了,因為下載又需要帳號了,我個人也沒那麼喜歡 Qt,要不是 Kobo 底層使用到它,我也不需要用它來開發程式,偏偏 Kobo EInk-Bro 又需要 GUI,不然我早就爽爽用 Golang 來寫了,老天爺有必要這麼搞我嗎?明明我昨天才買了一包愛心餅乾呀XD 

又要思考下一步了…

2023/09/01 更新

Linux 下安裝也不是很順利,故之前試了一下就沒試了。

雖然原本的目標已經過期,但這種事急不得,有開始並且持續有進度,對白天要上班晚上還有一堆事要忙的我來說,我覺得已經很棒了XD

今天將之前 build 好的程式拿回家裡電腦嘗試,由於筆電是有 NVDIA 顯卡,故確實可以正常執行無誤,只是啟動速度有夠慢。另外,UI 似乎沒有拉好,WebView UI 元件並沒有如我預期的顯示畫面,這部份還要再確認一下。

沒有留言: