今天在另外一台电脑上面使用 rt-thread 的 env 工具,scons --menuconfig 出现错误,提示如下:

scons: Reading SConscript files ...
scons: Entering directory `/home/ptz/workspace/rt-thread/rt-thread/tools/kconfig-frontends'
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o kconfig-mconf libs/lxdialog/checklist.o libs/lxdialog/inputbox.o libs/lxdialog/menubox.o libs/lxdialog/textbox.o libs/lxdialog/util.o libs/lxdialog/yesno.o libs/parser/yconf.o frontends/mconf/mconf.o -lncurses
/usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: libs/lxdialog/util.o: undefined reference to symbol 'nodelay'
/lib64/libtinfo.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
scons: *** [kconfig-mconf] Error 1
scons: building terminated because of errors.
sh: /home/ptz/workspace/rt-thread/rt-thread/tools/kconfig-frontends/kconfig-mconf: No such file or directory

初步判断是找不到 nodelay 这个函数,于是使用 nm -D /lib/libncurses.so.6 |grep -w nodelay, 结果发现果然没有 nodelay。然后测试了可以用的电脑,可以用的电脑上面 ncurses 这个动态库是有 nodelay 的,于是查看两台电脑 ncurses 的 USE 区别,结果发现,不能用的 ncurses 开启了 tinfo 这个 USE。然后 nm -D /lib/libtinfo.so.6 |grep -w nodelay,这下果然有了。

所有只需要修改 rt-thread/tools/kconfig-frontends/SConstruct, 把 tinfo 加入库路径即可正常工作了。

标签: Gentoo

添加新评论