我想从ncurses学习一些东西,这样我就可以使用程序集来编写一些简单的函数来绘制图形。
例如,当我进入initscr时,我就在这里,/lib/x86_64-linux-gnu/libncurses.so.6,我看不到任何c代码。你有什么办法解决这个问题吗?
我使用下面的命令来安装ncurses!
wget https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.2.tar.gz
tar xvzf ncurses-6.2.tar.gz
cd ...
./configure --with-shared --with-normal --with-debug --enable-overwrite
make
sudo make install发布于 2022-07-17 09:51:59
你需要链接器libncurses_g.a
gcc -g ... -o ... /usr/lib/libncurses_g.a
发布于 2022-07-18 11:20:36
./configure ...
make
sudo make install99%的时间安装到/usr/local。
在编译和链接时,通常会在通常的/usr/local/include和/usr/lib之前咨询/usr/include和/usr/lib。但是,在运行时加载共享库时,/usr/local将被完全忽略。为了适应这种情况,你需要做一些特别的事情。
有几种方法可以做到这一点。
-Wl,-rpath=/usr/local/lib添加到链接命令中。/usr/local/lib的内容。/usr/local/lib添加到您的/etc/ld.so.conf中(要小心执行)。发布于 2022-07-18 10:09:09
注意,默认情况下,所有的Linux终端模拟器都支持Unicode (使用UTF-8)以及ANSI转义码。
因此,如果要在左上角的亮绿色字母"B“周围打印一个小的红色双壁矩形,程序只需编写以下字符串(用C或程序集表示法,即双引号不是字符串内容的一部分):
"\033[s\033[1;1H\033[0;31m╔═╗\033[0m\033[2;1H\033[0;31m║\033[1;32mB\033[0;31m║\033[0m\033[3;1H\033[0;31m╚═╝\033[0m\033[u"其中两个字节(27,91 = \033[)构成控制序列引导者CSI。
请记住,write syscall允许返回一个短计数,特别是在写到tty (类似终端的设备)时。如果返回值为正但小于字符串的长度,则需要将指向数据的指针向前推进,从长度中减去返回值,然后再次执行syscall操作,直到返回所需的长度或小于1的值为止(不应该出现0,负值是错误代码)。
ncurses所做的是支持这些代码的各种形式,基本上是所有类似终端的设备,检测通过TERM环境变量使用的正确代码,并提供许多有用的抽象(通过助手函数,如windows等)。但上述,UTF-8和ANSI转义码,工作在大多数情况下,是可行的最低限度的实现。
https://stackoverflow.com/questions/73010502
复制相似问题