编译报错:
/usr/bin/install -D -m 0644 /mnt/d/Program/Ubuntu/buildroot/output/host/aarch64-buildroot-linux-uclibc/sysroot/usr/share/terminfo/a/ansi /mnt/d/Program/Ubuntu/buildroot/output/target/usr/share/terminfo/a/ansi
/usr/bin/install: cannot stat '/mnt/d/Program/Ubuntu/buildroot/output/host/aarch64-buildroot-linux-uclibc/sysroot/usr/share/terminfo/a/ansi': No such file or directory
查看 sysroot/usr/share/terminfo 下内容如下:
root@wmxpc:~/win/buildroot# ls /mnt/d/Program/Ubuntu/buildroot/output/host/aarch64-buildroot-linux-uclibc/sysroot/usr/share/terminfo/
31 34 37 41 4d 51 62 65 68 6b 6e 71 74 77
32 35 38 45 4e 58 63 66 69 6c 6f 72 75 78
33 36 39 4c 50 61 64 67 6a 6d 70 73 76 7a
似乎是把目录名 a 变成了它的 ASCII 码 61,,
请问这是什么导致的??怎么解决?
离线
我现在想到的一个可能有效的办法是,修改 buildroot\package\ncurses\ncurses.mk 下的如下部分:
NCURSES_TERMINFO_FILES = \
a/ansi \
d/dumb \
l/linux \
p/putty \
p/putty-256color \
p/putty-vt100 \
s/screen \
s/screen-256color \
v/vt100 \
v/vt100-putty \
v/vt102 \
v/vt200 \
v/vt220 \
x/xterm \
x/xterm+256color \
x/xterm-256color \
x/xterm-color \
x/xterm-xfree86 \
$(call qstrip,$(BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO))
把其中的 a、d、l、p、s、v、x 等目录名改成其对应的 ASCII 码。。
但是我更想知道目录名是怎么变成 ASCII 码的,,在对应的位置修改,不让它变成 ASCII 码
离线
网上查到有人遇到相同的问题,他的解决方法是把目录手动拷贝过去,,感觉有点儿麻烦
离线
还没有找到目录名变成数字的根源,暂时想到一个方法避免手动拷贝,,先走通编译流程吧
找到 buildroot\package\ncurses\ncurses.mk 中如下内容:
define NCURSES_TARGET_CLEANUP_TERMINFO
$(RM) -rf $(TARGET_DIR)/usr/share/terminfo $(TARGET_DIR)/usr/share/tabset
$(foreach t,$(NCURSES_TERMINFO_FILES), \
$(INSTALL) -D -m 0644 $(STAGING_DIR)/usr/share/terminfo/$(t) \
$(TARGET_DIR)/usr/share/terminfo/$(t)
)
endef
可知,第一个 $(t) 指定源地址,第二个 $(t) 指定目的地址,只需要将第一个 $(t) 的第一个字符转换成其 ASCII 码数字应该就可以编译了
不懂 shell 怎么处理字符串,,用 python 处理,改成如下内容:
define NCURSES_TARGET_CLEANUP_TERMINFO
$(RM) -rf $(TARGET_DIR)/usr/share/terminfo $(TARGET_DIR)/usr/share/tabset
$(foreach t,$(NCURSES_TERMINFO_FILES), \
$(INSTALL) -D -m 0644 $(STAGING_DIR)/usr/share/terminfo/$(shell python3 -c \
"import sys; t = sys.argv[1]; t = f'{ord(t[0]):x}{t[1:]}'; print(t)" ${t}) \
$(TARGET_DIR)/usr/share/terminfo/$(t)
)
endef
离线
编译完成了,,成功生成了 sdcard.img,,
没有遇到其他网友说的需要“用fakeroot-tcp替换fakeroot-sysv”的问题
过程还算顺利,,就遇到两个问题,,除了楼上那个问题,,另一个是 WSL 中 Ubuntu 的 PATH 会包含 Windows 的 PATH,,而 Windows 的 PATH 路径可能包含空格,,导致编译出错,,解放方法是使用 “PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make” 临时覆盖 PATH
看起来 WSL 下编译 Buildroot 还是可行的。。
离线