ayuwo
新手上路
新手上路
阅读:8回复:0

yong编译记录-arm64-麒麟v10 sp1

楼主#
更多 发布于:2026-08-01 00:35
Yong编译记录-arm64-麒麟v10 sp1

下载链接:https://www.ilanzou.com/s/a2ylZ4wM

一、基本情况


代码来源:https://github.com/dgod/yong
版本:yong 260729
git版本:
yong-master-733fc4b
build.js-master-825f332
编译环境:
$ uname -a
Linux user-pc 5.4.96-40-kr9a0 #43-KYLINOS SMP PREEMPT Mon Sep 29 06:08:46 UTC 2025 aarch64 aarch64 aarch64 GNU/Linux
$ cat /etc/kylin-build
Kylin-Desktop V10-SP1
Build 20260127
buildid: 82663
$ ibus version
IBus 1.5.22
$ echo $XDG_CURRENT_DESKTOP
UKUI
user@user-pc:~/.local/share/yong$  sudo ./yong-tool.sh --sysinfo
DIST debian found
sysinfo:
  DIST: debian
  CFG: /usr/share/im-config/data/10_yong
  HOST_ARCH: arm
  HOST_MACHINE: 64
  PATH_LIB32:
  PATH_LIB64: /usr/lib64
  HOST_TRIPLET32: arm-linux-gnu
  HOST_TRIPLET64: aarch64-linux-gnu
  IBUS_STATUS: 1
  GTK2_PATH64: /usr/lib/aarch64-linux-gnu/gtk-2.0
  GTK3_PATH64: /usr/lib/aarch64-linux-gnu/gtk-3.0
  GTK4_PATH64: /usr/lib/gtk-4.0
  GTK2_IMMODULES32:
  GTK2_IMMODULES64: /usr/lib/aarch64-linux-gnu/gtk-2.0/2.10.0/immodules.cache
  QT5_PATH32: /usr/lib/qt5
  QT5_PATH64: /usr/lib/aarch64-linux-gnu/qt5
--sysinfo Done


二、编译准备


1. 安装编译依赖
sudo apt install libgtk-3-dev libgtk2.0-dev libxkbcommon-dev libibus-1.0-dev libgtk-layer-shell-dev libwayland-dev qtbase5-dev qtbase5-private-dev build-essential libc6-dev clang nodejs curl libcurl4-openssl-dev p7zip fakeroot llvm-10-dev
注意:经实际测试,相比论坛帮助需要增加一些依赖
2.创建相关目录
进入yong-master目录创建。
mkdir -p {llib,cloud,gbk,mb,vim}/l64 ; mkdir -p {im,config}/{l64-gtk3,l64-gtk2} ; mkdir -p im/gtk-im/{l64-gtk3,l64-gtk2} ; mkdir -p im/IMdkit/l64 ; mkdir -p im/qt5-im/l64-qt5; mkdir -p im/conio/l64
mkdir -p linim/wui/l64; mkdir -p linim/l64
注意:因源码变化,需要增加im/conio、linimwui等目录。


三、编译和调试


运行命令编译(build.js要放入yong-master目录中)。
node build.js l64 -x l64-qt6 -x l64-gtk4


问题1:
$ node build.js l64 -x l64-qt6 -x l64-gtk4
clang -fpic -D_GNU_SOURCE -Wall -pipe -g -O2 -flto=auto -ffast-math -fms-extensions -Wno-microsoft-anon-tag -Wno-invalid-source-encoding -fdefer-ts -c larray.c -o l64/larray.o
clang: error: unknown argument: '-fdefer-ts'
clang: error: unsupported argument 'auto' to option 'flto='
原因:
-flto=auto:麒麟系统老版本 Clang 没有 auto 取值,只支持 -flto(开启 LTO)、-flto=thin,不识别 flto=auto。
-fdefer-ts:这个参数是 GCC 专属扩展,Clang 完全不存在,直接无法识别
处理:
$ grep -rn "fdefer" ./
./llib/build.txt:73: env('CFLAGS+=-fdefer-ts');
./rules.txt:82: env('CFLAGS+=-fdefer-ts');
删除-fdefer-ts参数。
$ grep -rn "flto" ./
./llib/build.txt:53: env("CFLAGS+=-Wall -pipe -g -O2 -flto=auto -ffast-math -fms-extensions -Wno-microsoft-anon-tag");
将-flto=auto改为-flto。


问题2:
clang -m64 -I/home/user/DEV/yong-master/llib -I/home/user/DEV/yong-master/im -DCFG_XIM_YBUS -DCFG_XIM_IBUS `pkg-config --cflags ibus-1.0` -DL_CALL_GLIB_SERVER -DL_CALL_GLIB_CLIENT -Wno-deprecated-declarations -I/home/user/DEV/yong-master/im/IMdkit -D_GNU_SOURCE -Wall -g -O2 -fno-strict-aliasing -Wno-format-truncation -fms-extensions -pipe -ffast-math -I/home/user/DEV/yong-master/include -I/home/user/DEV/yong-master/common -Wno-invalid-source-encoding -Wno-microsoft-anon-tag `pkg-config --cflags gtk+-3.0` -Wno-unused-const-variable -c /home/user/DEV/yong-master/im/wayland/ybus-wayland.c -o ybus-wayland.o
warning: unknown warning option '-Wno-format-truncation' [-Wunknown-warning-option]
/home/user/DEV/yong-master/im/wayland/ybus-wayland.c:60:66: error: unknown type name 'GtkLayerShellKeyboardMode'
static void (*p_gtk_layer_set_keyboard_mode) (GtkWindow *window, GtkLayerShellKeyboardMode mode);
                                                                 ^
In file included from /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:101:
/home/user/DEV/yong-master/im/wayland/input-method-client-protocol-v1.h:352:121: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY'
                         ZWP_INPUT_METHOD_CONTEXT_V1_DESTROY, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_input_method_context_v1), WL_MARSHAL_FLAG_DESTROY);
                                                                                                                                             ^
In file included from /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:103:
/home/user/DEV/yong-master/im/wayland/input-method-client-protocol-v2.h:658:105: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY'
                         ZWP_INPUT_METHOD_V2_DESTROY, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_input_method_v2), WL_MARSHAL_FLAG_DESTROY);
                                                                                                                             ^
/home/user/DEV/yong-master/im/wayland/input-method-client-protocol-v2.h:733:119: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY'
                         ZWP_INPUT_POPUP_SURFACE_V2_DESTROY, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_input_popup_surface_v2), WL_MARSHAL_FLAG_DESTROY);
                                                                                                                                           ^
/home/user/DEV/yong-master/im/wayland/input-method-client-protocol-v2.h:884:133: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY'
                         ZWP_INPUT_METHOD_KEYBOARD_GRAB_V2_RELEASE, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_input_method_keyboard_grab_v2), WL_MARSHAL_FLAG_DESTROY);
                                                                                                                                                         ^
/home/user/DEV/yong-master/im/wayland/input-method-client-protocol-v2.h:948:121: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY'
                         ZWP_INPUT_METHOD_MANAGER_V2_DESTROY, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_input_method_manager_v2), WL_MARSHAL_FLAG_DESTROY);
                                                                                                                                             ^
In file included from /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:104:
/home/user/DEV/yong-master/im/wayland/virtual-keyboard-v1.h:208:113: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY'
                         ZWP_VIRTUAL_KEYBOARD_V1_DESTROY, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_virtual_keyboard_v1), WL_MARSHAL_FLAG_DESTROY);
                                                                                                                                     ^
/home/user/DEV/yong-master/im/wayland/ybus-wayland.c:1709:35: error: use of undeclared identifier 'GTK_LAYER_SHELL_KEYBOARD_MODE_NONE'
                p_gtk_layer_set_keyboard_mode(w,GTK_LAYER_SHELL_KEYBOARD_MODE_NONE);
                                                ^
/home/user/DEV/yong-master/im/wayland/ybus-wayland.c:1756:35: error: use of undeclared identifier 'GTK_LAYER_SHELL_KEYBOARD_MODE_NONE'
                p_gtk_layer_set_keyboard_mode(w,GTK_LAYER_SHELL_KEYBOARD_MODE_NONE);
                                                ^
/home/user/DEV/yong-master/im/wayland/ybus-wayland.c:1793:34: error: use of undeclared identifier 'GTK_LAYER_SHELL_KEYBOARD_MODE_NONE'
        p_gtk_layer_set_keyboard_mode(w,GTK_LAYER_SHELL_KEYBOARD_MODE_NONE);
                                        ^
/home/user/DEV/yong-master/im/wayland/ybus-wayland.c:1815:34: error: use of undeclared identifier 'GTK_LAYER_SHELL_KEYBOARD_MODE_NONE'
        p_gtk_layer_set_keyboard_mode(w,GTK_LAYER_SHELL_KEYBOARD_MODE_NONE);
                                        ^
1 warning and 11 errors generated.
原因:
GtkLayerShellKeyboardMode / GTK_LAYER_SHELL_KEYBOARD_MODE_NONE 未定义。 gtk-layer-shell 库版本过低或未安装。GtkLayerShellKeyboardMode 枚举是在 gtk-layer-shell ≥ 0.6.0 中引入的;
WL_MARSHAL_FLAG_DESTROY 未定义。 wayland-client 版本过低。WL_MARSHAL_FLAG_DESTROY 是在 wayland ≥ 1.20.0 中引入的(对应 wayland-client-core.h)。麒麟系统中的 wayland-client.h 是旧版,不包含此标志。
处理:
如需要wayland支持,可在本地下载和手动编译wayland-protocols、gtk-layer-shell、wayland较高版本后编译。
https://github.com/wmww/gtk-layer-shell.git
https://gitlab.freedesktop.org/wayland/wayland.git
如不需要wayland支持(麒麟V10 SP1主要是X11环境,部分华为擎云机型是Wayland环境),可注释掉相关代码编译。
因过程复杂,不详细列出。
检测桌面环境:
$ echo $XDG_SESSION_TYPE
wayland
验证自编译wanyland结果:
pkg-config --modversion wayland-client      # ≥ 1.22.0
pkg-config --modversion gtk-layer-shell-0   # ≥ 0.6.0
TODO:建议build脚本可以单独判断wayland模块是否编译,类似-x wayland会更方便。


问题3:
clang -m64 -I/home/user/DEV/yong-master/llib -I/home/user/DEV/yong-master/im -DCFG_XIM_YBUS -DCFG_XIM_IBUS `pkg-config --cflags ibus-1.0` -DL_CALL_GLIB_SERVER -DL_CALL_GLIB_CLIENT -Wno-deprecated-declarations -I/home/user/DEV/yong-master/im/IMdkit -D_GNU_SOURCE -Wall -g -O2 -fno-strict-aliasing -Wno-format-truncation -fms-extensions -pipe -ffast-math -I/home/user/DEV/yong-master/include -I/home/user/DEV/yong-master/common -Wno-invalid-source-encoding -Wno-microsoft-anon-tag `pkg-config --cflags gtk+-3.0` -Wno-unused-const-variable -c /home/user/DEV/yong-master/im/app-indicator.c -o app-indicator.o
warning: unknown warning option '-Wno-format-truncation' [-Wunknown-warning-option]
/home/user/DEV/yong-master/im/app-indicator.c:178:5: error: unknown type name 'uint32_t'
    uint32_t menu_revision;
    ^
1 warning and 1 error generated.
原因:
uint32_t 标准定义在 <stdint.h>,源码没包含这个头文件。
处理:
打开 im/app-indicator.c,在文件头文件区添加:
#include <stdint.h>


问题4:
本机是 aarch64,-m64 是 x86 专用选项。虽然 clang 目前只是给出 warning 而非 error,但建议修改 yong 的构建配置以去除该标志,避免潜在问题
处理:
查找 Makefile 或构建脚本中的 -m64
user@user-pc:~/DEV/yong-master$ grep -rn '\-m64' ./
./rules.txt:45: env("CC=clang -m64");
./rules.txt:46: env("CXX=clang++ -m64");
删除两处-m64参数。


问题5:
$ node build.js l64 -x l64-qt6 -x l64-gtk4
clang -I/home/user/DEV/yong-master/linim/wui -I/home/user/DEV/yong-master/linim/wui/protocols -fPIC -I/home/user/DEV/yong-master/llib -Wno-deprecated-declarations `pkg-config --cflags glib-2.0 gio-2.0 cairo pangocairo` -D_GNU_SOURCE -Wall -g -O2 -fno-strict-aliasing -Wno-format-truncation -fms-extensions -pipe -ffast-math -I/home/user/DEV/yong-master/include -I/home/user/DEV/yong-master/common -Wno-invalid-source-encoding -Wno-microsoft-anon-tag `pkg-config --cflags gtk+-3.0` -O0 -O0 -c /home/user/DEV/yong-master/linim/wui/wui-wayland.c -o wui-wayland.o
warning: unknown warning option '-Wno-format-truncation' [-Wunknown-warning-option]
/home/user/DEV/yong-master/linim/wui/wui-wayland.c:687:3: error: field designator 'preferred_buffer_scale' does not refer to any field in type 'const struct wl_surface_listener'
        .preferred_buffer_scale = surface_preferred_buffer_scale,
         ^
/home/user/DEV/yong-master/linim/wui/wui-wayland.c:688:3: error: field designator 'preferred_buffer_transform' does not refer to any field in type 'const struct wl_surface_listener'
        .preferred_buffer_transform = surface_preferred_buffer_transform,
         ^
1 warning and 2 errors generated.
原因:
wayland版本较低,wl_surface_listener 结构体里 没有 preferred_buffer_scale、preferred_buffer_transform` 这两个回调字段。
处理:
自编译较高版本(1.22以上)可以解决。
或条件化wui-wayland.c中编译,在低版本wayland中不用这两个字段。
static const struct wl_surface_listener surface_listener = {
    .enter = surface_enter,
    .leave = surface_leave,
#if WL_SURFACE_LISTENER_VERSION >= 6
    .preferred_buffer_scale = surface_preferred_buffer_scale,
    .preferred_buffer_transform = surface_preferred_buffer_transform,
#endif
};


四、编译后打包
运行命令打包。
node build.js -C install copy64 dist


问题:
报gtk4相关文件无法找到
原因:
build.js中未对取消打包的模块进行条件化判断,引起文件复制错误。
处理:
注释掉build.js中copy_build函数有关gtk4语句
function copy_build(build){
 env("BUILD","=",build);
 mkdir(["yong/$(BUILD)","yong/$(BUILD)/gtk-im"]);
 cp('../llib/$(BUILD)/libl.so','yong/$(BUILD)');
 cp('../im/$(BUILD)-gtk3/yong','yong/$(BUILD)/yong-gtk3');
 cp('../config/$(BUILD)-gtk3/yong-config','yong/$(BUILD)/yong-config-gtk3');
 //cp('../config/$(BUILD)-gtk4/yong-config','yong/$(BUILD)/yong-config-gtk4');
 cp('../vim/$(BUILD)/yong-vim','yong/$(BUILD)');
 cp('../im/conio/$(BUILD)/yong-con','yong/$(BUILD)');
 cp('../mb/$(BUILD)/libmb.so','yong/$(BUILD)');
 cp('../gbk/$(BUILD)/libgbk.so','yong/$(BUILD)');
 cp('../cloud/$(BUILD)/libcloud.so','yong/$(BUILD)');
 cp('../im/gtk-im/$(BUILD)-gtk2/im-yong.so','yong/$(BUILD)/gtk-im/im-yong-gtk2.so');
 cp('../im/gtk-im/$(BUILD)-gtk3/im-yong.so','yong/$(BUILD)/gtk-im/im-yong-gtk3.so');
 //cp('../im/gtk4-im/$(BUILD)-gtk4/libimyong.so','yong/$(BUILD)/gtk-im/libimyong-gtk4.so');
 
 exec("strip yong/$(BUILD)/gtk-im/*.so");
 exec("strip yong/$(BUILD)/*.so");
 exec("strip yong/$(BUILD)/yong-gtk3");
 exec("strip yong/$(BUILD)/yong-config-gtk3");
 //exec("strip yong/$(BUILD)/yong-config-gtk4");
 exec("strip yong/$(BUILD)/yong-vim");


 if(!_exists("yong/$(BUILD)/yong-config")){
 cd("yong/$(BUILD)");
 exec("ln -sf yong-config-gtk3 yong-config");
 cd("../..");
 }
}


五、安装使用


本机为X11环境,使用ibus使用小小。
先卸载所有fcitx相关软件包。
安装ibus并运行im-config -n ibus选中。
复制打包文件到home/user/.local/share/yong
user@user-pc:~/.local/share/yong$ sudo ./yong-tool.sh --install
输入密码        
DIST debian found
install 64bit version
--install Done
重启后在ibus配置中添加中文-yong即可。


wayland安装使用和x11不同,华为擎云机型的wayland是kwin,个人没有环境测试,请查询帮助。
游客

返回顶部