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

cgdb UTF-8乱码的更多相关文章

  1. java web 学习十(HttpServletRequest对象1)

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  2. java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")

    http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...

  3. ubuntu下mysql中文乱码问题

    本来就是想弄个网页往数据库里添加数据的,然后就发现了mysql的中文乱码问题,弄了半天解决方法如下: 首先停mysql服务,编辑配置文件my.cnf $ sudo stop mysql $sudo v ...

  4. 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

    转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...

  5. ascii、unicode、utf、gb等编码详解

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节".再后来,他们又做了一些可以处理这 ...

  6. java中文乱码解决之道(三)-----编码详情:伟大的创想---Unicode编码

    随着计算机的发展.普及,世界各国为了适应本国的语言和字符都会自己设计一套自己的编码风格,正是由于这种乱,导致存在很多种编码方式,以至于同一个二进制数字可能会被解释成不同的符号.为了解决这种不兼容的问题 ...

  7. java中文乱码解决之道(八)-----解决URL中文乱码问题

    我们主要通过两种形式提交向服务器发送请求:URL.表单.而表单形式一般都不会出现乱码问题,乱码问题主要是在URL上面.通过前面几篇博客的介绍我们知道URL向服务器发送请求编码过程实在是实在太混乱了.不 ...

  8. 转载:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

    转载: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级 ...

  9. Openfire Strophe开发中文乱码问题

    网站上有很多Openfire Web方案,之前想用Smack 但是jar包支持客户端版本的,还有JDK版本问题  一直没调试成功  估计成功的方法只能拜读源码进行修改了. SparkWeb 官网代码很 ...

随机推荐

  1. 返回ArrayBuffer数据下载

    返回的数据 const blob = new Blob([response.data]); if ('download' in document.createElement('a')) { const ...

  2. Hive调优笔记

    Hive调优 先记录了这么多,日后如果有遇到,再补充. fetch模式 <property> <name>hive.fetch.task.conversion</name ...

  3. 四:MySQL系列之Python交互(四)

    该篇主要介绍MySQL数据库的分表.以及与Python的交互的基本操作等. 一.拆分表操作 1.1  准备工作 创建数据库 --> 使用数据库 --> 创建数据表 --- 添加记录 -- ...

  4. DNS服务——正向查找区 和 逆向查找区

    前言 正向查找区,就是我们最熟知的DNS.即根据域名解析成IP 逆向查找区,即根据IP解析成域名. 他们之间的关系很像ARP和RARP 正向查找区 /etc/named.rfc1912.zones用于 ...

  5. JavaScript中对数组的排序

    将下列对象数组,通过工资属性,由高到低排序 var BaiduUsers = [], WechatUsers = []; var User = function(id, name, phone, ge ...

  6. ant不是内部命令

    解压路径为举例路径:    解压在E盘 新建变量ANT_HOME 路径为解压目录如E:/apache-ant-1.7.1 Path中添加路径为%ANT_HOME%/bin; 错误提示: 'ant' 不 ...

  7. m_atoi

    自己实现atoi函数 函数定义:将字符串转换成整型数:atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结 ...

  8. OpenLayer3入门——[一]

    一.OpenLayer3下载 首先下载OpenLayer3开发包,步骤如下: 下载地址https://github.com/openlayers/openlayers/releases/tag/v3. ...

  9. matlab(8) Regularized logistic regression : 不同的λ(0,1,10,100)值对regularization的影响,对应不同的decision boundary\ 预测新的值和计算模型的精度predict.m

    不同的λ(0,1,10,100)值对regularization的影响\ 预测新的值和计算模型的精度 %% ============= Part 2: Regularization and Accur ...

  10. MySQL5.7版本安装(压缩包形式)

    1.去官网下载 MySQL 压缩包 2.配置环境变量 3.创建配置文件my.ini (放置 mysql-5.7.28-winx64 目录下) my.ini 配置文件 编写如下内容 [client] p ...