news 2026/9/12 10:30:22

【2015-01-17】GNU Readline Library编译及简单分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【2015-01-17】GNU Readline Library编译及简单分析

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2015-01-17| 标题:GNU Readline Library编译及简单分析分类:编程 / C && C++ |标签:readline


GNU Readline Library编译及简单分析

    • 编译:
    • 使用:

GNU Readline 是一个开源的程序库,可以实现交互式的文本编辑功能。这里简单的笔记下如何编译和使用它。

官网:http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html

编译:

作者编译使用的linux版本是Ubuntu14.04x64版本。

首先从官网上下载下来压缩文件。这里作者下载的版本是readline-6.3.tar.gz。

根据INSTALL文件的介绍,输入命令如下:

cstriker1407@ubuntu1404x64:~$tar-zxfreadline-6.3.tar.gz#解压缩tar包cstriker1407@ubuntu1404x64:~$cdreadline-6.3/ cstriker1407@ubuntu1404x64:~/readline-6.3$ ./configure#生成头文件cstriker1407@ubuntu1404x64:~/readline-6.3$makeeverything#编译所有文件cstriker1407@ubuntu1404x64:~/readline-6.3$sudomakeinstall#使用root权限,将编译好的库拷贝到系统中。

如果过程中出现了错误

/usr/bin/ld: cannot find -ltermcap

可以安装一个软件,命令如下:

cstriker1407@ubuntu1404x64:~/readline-6.3$sudoapt-getinstalllibncurses5-dev

使用:

压缩包中附带了很多例子,这里看一个最简单的:

cstriker1407@ubuntu1404x64:~/readline-6.3$cdexamples/ cstriker1407@ubuntu1404x64:~/readline-6.3/examples$lsautoconf hist_erasedups histexamp.o Makefile rl.c rlcat.c rlfe rltest.c rlwrap-0.30.tar.gz excallback.c hist_erasedups.c hist_purgecmd Makefile.in rl-callbacktest rlcat.o rl-fgets.c rltest.o fileman hist_erasedups.o hist_purgecmd.c manexamp.c rl-callbacktest.c rlevent rl.o rlversion fileman.c histexamp hist_purgecmd.o readlinebuf.h rl-callbacktest.o rlevent.c rlptytest.c rlversion.c fileman.o histexamp.c Inputrc rl rlcat rlevent.o rltest rlversion.o cstriker1407@ubuntu1404x64:~/readline-6.3/examples$ ./rlversion6.3

这里分析下rlversion的源码,有删改:

#ifdefined(HAVE_CONFIG_H)#include<config.h>#endif#include<stdio.h>#include<sys/types.h>#include"posixstat.h"#ifdefHAVE_STDLIB_H#include<stdlib.h>#elseexternvoidexit();#endif#ifdefREADLINE_LIBRARY#include"readline.h"#else#include<readline/readline.h>#endifmain(){printf("%s", rl_library_version ? rl_library_version : "unknown");exit(0);}

由于是下载的源码编译,这里宏HAVE_CONFIG_H和READLINE_LIBRARY在makefile里面被定义了。
如果是直接安装编译好的readline库,应该可以省掉。
来看下examples下面的makefile,有删改

RL_LIBRARY_VERSION = 6.3 SHELL = /bin/sh RM = rm -f prefix = /usr/local exec_prefix = ${prefix} datarootdir = ${prefix}/share bindir = ${exec_prefix}/bin srcdir = . datadir = ${datarootdir} top_srcdir = .. #BUILD_DIR = . BUILD_DIR = /home/cstriker1407/readline-6.3 installdir = $(datadir)/readline INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} INSTALL_DATA = ${INSTALL} -m 644 EXEEXT = OBJEXT = o # Support an alternate destination root directory for package building DESTDIR = DEFS = -DHAVE_CONFIG_H CC = gcc CFLAGS = -g -O LOCAL_CFLAGS = -DREADLINE_LIBRARY -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"' CPPFLAGS = INCLUDES = -I$(srcdir) -I$(top_srcdir) -I.. CCFLAGS = $(DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(INCLUDES) $(CFLAGS) LDFLAGS = -g -L.. -L./lib/termcap PURIFY = READLINE_LIB = ../libreadline.a HISTORY_LIB = ../libhistory.a TERMCAP_LIB = -ltermcap .c.o: ${RM} $@ $(CC) $(CCFLAGS) -c $< SOURCES = rlversion.c EXECUTABLES = rlversion$(EXEEXT) OBJECTS = rlversion.o OTHEREXE = rlptytest$(EXEEXT) OTHEROBJ = rlptytest.o all: $(EXECUTABLES) everything: all check: rlversion$(EXEEXT) @echo Readline version: `rlversion$(EXEEXT)` installdirs: -$(SHELL) $(top_srcdir)/support/mkdirs $(DESTDIR)$(installdir) install: installdirs @for f in $(SOURCES); do \ $(RM) $(DESTDIR)$(installdir)/$$f ; \ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(installdir) ; \ done uninstall: @for f in $(SOURCES); do \ $(RM) $(DESTDIR)$(installdir)/$$f ; \ done -rmdir $(DESTDIR)$(installdir) rlversion$(EXEEXT): rlversion.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rlversion.o $(READLINE_LIB) $(TERMCAP_LIB) clean mostlyclean: $(RM) $(OBJECTS) $(OTHEROBJ) $(RM) $(EXECUTABLES) $(OTHEREXE) *.exe distclean maintainer-clean: clean $(RM) Makefile rlversion.o: rlversion.c rlversion.o: $(top_srcdir)/readline.h
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 2:21:13

【2015-01-16】linux的id命令简单笔记

[历史归档] 本文原发布于 cstriker1407.info 个人博客&#xff0c;内容为历史存档&#xff0c;仅供参考。 发布时间&#xff1a; 2015-01-16 &#xff5c; 标题&#xff1a;linux的id命令简单笔记 &#xff5c; 分类&#xff1a; 操作系统 / linux &#xff5c; 标签&…

作者头像 李华
网站建设 2026/9/1 22:19:09

单片机计算机毕设之基于 STM32、ESP-01S 的车载安防数据采集预警终端开发 基于 STM32 单片机的车辆温度监测与防盗报警系统设计(010705)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/8/30 22:43:15

两年Android开发三面上岸腾讯,这些核心知识点建议

概述 感觉毕业后时间过得真快啊&#xff0c;从 19 年 7 月本科毕业入职后&#xff0c;到现在快两年了&#xff0c;前段时间金三银四期间想着找一个新的工作&#xff0c;前前后后花了一个多月的时间复习以及面试&#xff0c;面试好几家大厂&#xff0c;最后选择了腾讯。也祝各位…

作者头像 李华
网站建设 2026/9/2 21:14:19

ShawzinBot 快速上手:3 步把 MIDI 文件变成游戏内沙温琴演奏

ShawzinBot 快速上手&#xff1a;3 步把 MIDI 文件变成游戏内沙温琴演奏 【免费下载链接】ShawzinBot Convert a MIDI input to a series of key presses for the Shawzin 项目地址: https://gitcode.com/gh_mirrors/sh/ShawzinBot ShawzinBot 是一款把 MIDI 文件或 MID…

作者头像 李华
网站建设 2026/8/30 11:33:10

Java实现哈密顿路径搜索与正则表达式筛选的算法实践

1. 项目概述&#xff1a;当“玩具蛇”遇上正则表达式最近在整理一些编程练习题时&#xff0c;遇到了一个挺有意思的题目&#xff0c;题目名字就叫“玩具蛇正则问题”。乍一看&#xff0c;这组合有点跨界——“玩具蛇”听起来像是个图形化或者路径搜索的问题&#xff0c;而“正则…

作者头像 李华