support utf-8
cgdb github上的issues里面有人提到了这个问题,维护者回复的是须要使用libncursesw
这个支持宽字符的库来解决这个问题。linux
查看是否安装了该库ldconfig -p | grep libncursesw
,未安装则查看有哪些库:git
thomas@ubuntu:~$ apt search libncursesw Sorting... Done Full Text Search... Done `libncursesw5`/bionic-updates,now 6.1-1ubuntu1.18.04 amd64 shared libraries for terminal handling (wide character support) `libncursesw5-dbg`/bionic-updates 6.1-1ubuntu1.18.04 amd64 debugging/profiling libraries for ncursesw `libncursesw5-dev`/bionic-updates,now 6.1-1ubuntu1.18.04 amd64 developer's libraries for ncursesw
分别有三个,我当时选择的是第一个libncursesw5
,进行了安装,结果configure的时候检测不到libncursesw,只检测到了libncurses。对比目录里面的文件:github
thomas@ubuntu:/usr/lib/x86_64-linux-gnu$ ls /usr/lib/x86_64-linux-gnu/libncurses* -l -rw-r--r-- 1 root root 297196 May 23 2018 /usr/lib/x86_64-linux-gnu/libncurses.a -rw-r--r-- 1 root root 127016 May 23 2018 /usr/lib/x86_64-linux-gnu/libncurses++.a -rw-r--r-- 1 root root 31 May 23 2018 /usr/lib/x86_64-linux-gnu/libncurses.so
发现没有libncursesw,ldconfig -p | grep libncursesw
:shell
thomas@ubuntu:/usr/lib/x86_64-linux-gnu$ ldconfig -p | grep libncursesw libncursesw.so.5 (libc6,x86-64) => /lib/x86_64-linux-gnu/libncursesw.so.5
并无libncursesw.so
, ld就找不到了。sudo apt install libncursesw5-dev
,安装完开发者使用的库,这时/usr/lib/x86_64-linux-gnu/目录下才出现libncursesw.so
。这时再configure,显示使用的再也不是libncurses,而是libncursesw。make,make install。运行完美支持utf-8。ubuntu
以上啰嗦一大堆,直接说sudo apt install libncursesw5-dev
,问题解决。可是少了解决问题的过程和思路。在这个过程当中,有两个问题要理清。vim
libxx只包含了基本的运行时,若是只需运行软件,不用编译软件,安装这个。ionic
libxx-dev包含了运行时和头文件和其余库文件,若是编译其余软件须要连接这个库,安装这个。ide
libxx-dbg包含了运行时和头文件和其余库文件,以及调试信息。debug
由于这里我须要从源码编译cgdb,因此就须要选择libncursesw-dev调试
ld为何不连接libxx.so.nn?
首先得让ld找的到,能够看
vim /etc/ld.so.conf
,/etc/ld.so.conf
内容是:
include /etc/ld.so.conf.d/.conf
/etc/ld.so.conf.d/.conf这些文件就描述了ld搜索库时会搜索的目录。编译时使用的是-lncursesw,那么ld只会在这些目录下搜索libncursesw.so这个文件。注意是libxx.so,/lib/x86_64-linux-gnu/libncursesw.so.5虽然在搜索目录中,可是不知足后缀为.so。若是要强制使用它,则直接把它做为目标文件便可:
gcc a.o /lib/x86_64-linux-gnu/libncursesw.so.5 -o a