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. JS权威指南读书笔记(一)

    第一章 JavaScript概述 1 JS是一门高端的.动态的.弱类型的编程语言,非常适合面向对象和函数式的编程风格.   第二章 词法结构 1 JS程序是用Unicode字符集编写的. 2 JS是区 ...

  2. win10如何安装mariadb

    一.下载.安装 1.下载mariadb(https://downloads.mariadb.org/),解压 2.进入bin目录下执行(管理员模型-powershell) .\mysqld.exe - ...

  3. stm32 SD卡

    容量等级 SD容量有8MB.16MB.32MB.64MB.128MB.256MB.512MB.1GB.2GB SDHC容量有2GB .4GB.8GB.16GB.32GB SDXC容量有32GB.48G ...

  4. 修改docker容器端口映射的方法

    大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改.通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射. 有没有办法不保存镜像而直接修改 ...

  5. flask之蓝图BulePrint使用

    之前flask启用程序代码和逻辑代码都是在一个页面,这样代码多了很自然不利于关于,如果要将逻辑代码和进行分离,这里需要用到Falsk的蓝图(Blueprint) 项目结构 app文件夹为项目最外层文件 ...

  6. Apache老版本下载地址

    有时候我们想做测试或者使用旧版本软件时,往往发现官方网站已经下架,以Apache为例: Apache旧版本下载地址:http://archive.apache.org/dist/httpd/ .... ...

  7. URLErro和HTTPError

    url error URLError 产生的原因主要有: 没有网络连接 服务器连接失败 找不到指定的服务器 我们可以用try except语句来捕获相应的异常 from urllib import r ...

  8. javascript_12-递归

    递归 // function f1(){ // console.log("hello"); // f1(); // } // f1(); // 给递归添加结束的条件 var i = ...

  9. JS在浏览器中输出各种三角形

    直角三角形 <script type="text/javascript"> for(var i=1;i<=8;i++){ for(var j=1;j<=i; ...

  10. 【DevOps】在CentOS中安装Rancher2,并配置kubernetes集群

    准备 一台CentOS主机,安装DockerCE,用于安装Rancher2 一台CentOS主机,安装DockerCE,用于安装kubernetes集群管理主机 多台CentOS主机,安装Docker ...