• cgdb UTF-8乱码


    support utf-8
    cgdb github上的issues里面有人提到了这个问题,维护者回复的是需要使用libncursesw这个支持宽字符的库来解决这个问题。

    查看是否安装了该库ldconfig -p | grep libncursesw,未安装则查看有哪些库:

    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。对比目录里面的文件:

    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:

    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。

    以上啰嗦一大堆,直接说sudo apt install libncursesw5-dev,问题解决。但是少了解决问题的过程和思路。在这个过程中,有两个问题要理清。

    1. libxx、libxx-dgb、libxx-dev有什么区别,分别何时用?
    2. ld为什么不链接libxx.so.nn?
    • libxx、libxx-dgb、libxx-dev有什么区别,分别何时用?

    libxx只包含了基本的运行时,如果只需运行软件,不用编译软件,安装这个。

    libxx-dev包含了运行时和头文件和其他库文件,如果编译其他软件需要链接这个库,安装这个。

    libxx-dbg包含了运行时和头文件和其他库文件,以及调试信息。

    因为这里我需要从源码编译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

  • 相关阅读:
    html5学习系列之ef类标签
    html5学习系列之cd标签
    Java学习系列——xml学习基础
    html5学习系列——b标签
    为什么我要使用Linux,使用Linux的十个理由。
    设置Linux系统的空闲等待时间TMOUT的方法和Linux反空闲设置的两种方法
    创建动态MSSQL数据库表的方法
    SQL SERVER 自增列的方法
    XtraBackup构建MySQL主从环境的方法
    如何查看MySQL执行计划呢?
  • 原文地址:https://www.cnblogs.com/thammer/p/11008008.html
Copyright © 2020-2023  润新知