cgdb UTF-8亂碼

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

  1. libxx、libxx-dgb、libxx-dev有什麼區別,分別什麼時候用?
  2. ld爲何不連接libxx.so.nn?
  • libxx、libxx-dgb、libxx-dev有什麼區別,分別什麼時候用?

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

相關文章
相關標籤/搜索