标签: libreadline

未定义引用`readline'

我在尝试运行维基百科中提供GNU Readline库示例代码时遇到问题.在这里:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <readline/readline.h>
#include <readline/history.h>

int main()
{
    char* input, shell_prompt[100];

    // Configure readline to auto-complete paths when the tab key is hit.
    rl_bind_key('\t', rl_complete);

    for(;;) {
        // Create prompt string from user name and current working directory.
        snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024));

        // Display prompt and read input (n.b. input must be freed after use)...
        input = readline(shell_prompt);

        // Check for EOF.
        if (!input) …
Run Code Online (Sandbox Code Playgroud)

c readline libreadline

9
推荐指数
1
解决办法
2万
查看次数

Windows下静态链接,正确工作的readline库?

我们正在开发一个依赖于GNU readline库的C++软件包,我们通常使用gcc构建(至少要求版本4).现在我们想将它移植到Windows,获得一个静态链接的版本,我们可以重新分发,而无需用户编译.

我尝试了几种方法:

  • 使用Cygwin构建(不使用提供的readline和-mno-cygwinMinGW编译器),
  • 使用MinGW和GnuWin32的readline构建(未解析的依赖关系到stat64,我无法解析),
  • 使用MinGW构建并从源代码构建readline和必需的pdcurses(最有希望的方法,得到一个静态二进制文件!但是获得的交互式shell表现不正确,例如退格架没有可视化).

我们如何获得其中一种工作方法的想法?

c++ windows cygwin mingw libreadline

8
推荐指数
1
解决办法
5671
查看次数

如何链接GNU readline库而不是macosx中的libedit?

试图在macosx上构建Term-Readline-Gnu,无法抱怨libedit并建议使用gnu readline.我怎么做?

这是我尝试过的尝试之一:

首先我静态构建了GNU libreadline v6.2,但没有安装它 - 以确保我没有搞砸具有相同名称的系统版本:

./configure --prefix =/Users/Fred/Downloads/tmp1

使

make install-static

然后尝试构建Term_Readline-Gnu-1.20

cmc:Term-ReadLine-Gnu-1.20 cmc $ perl Makefile.PL --includedir =/Users/cmc/Downloads/tmp1/include --libdir =/Users/Fred/Downloads/tmp1/lib

找到`/usr/lib/libtermcap.dylib'.

gcc-4.2 -I/Users/Fred/Downloads/tmp1/include -arch x86_64 -arch i386 -arch ppc -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -I/usr/local/include -DHAVE_STRING_H rlver.c -o rlver -L/Users/Fred/Downloads/tmp1/lib -arch x86_64 -arch i386 -arch ppc -L/usr/local/lib -lreadline -ltermcap

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!

您正在使用的libreadline是libedit库.使用GNU Readline Library.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!

克里斯

macos perl gnu readline libreadline

7
推荐指数
2
解决办法
6234
查看次数

bash使用vi或emacs

从编程的角度来看,当您将bash shell设置为使用vi或emacs时

set -o vi
Run Code Online (Sandbox Code Playgroud)

要么

set -o emacs
Run Code Online (Sandbox Code Playgroud)

这里到底发生了什么?我一直在读一本书,声称bash shell使用这些编辑器中的任何一个来输入shell本身,但我认为它可能使用了readline.

bash libreadline

6
推荐指数
1
解决办法
1214
查看次数

如何在使用GNU readline从stdin读取时将消息输出到另一个线程上的stdout而不会弄乱输入?

对不起,长标题.我正在用C开发一个网络程序,它可以在stdout上显示从网络接收的消息,并通过GNU readline库接受stdin上的用户输入.问题是,当用户通过readline在主线程上键入命令时,网络消息到达并输出到stdout,这将生成如下内容:

场景:

输入:1234567890
网络消息:Hello
当用户输入"7"时,网络消息到达

终端的实际输出:

输入> 1234567Hello
890_

有没有办法让这样的输出?

你好
输入> 1234567890_

ps _是光标.

提前致谢!

c pthreads readline libreadline

6
推荐指数
1
解决办法
1255
查看次数

行首有输出时的“readline”

readline在我自己的程序中使用(版本 6.3,默认 [non-vi] 模式,Ubuntu 14.04)库,在终端窗口(在 PC 上)中运行。当readline()调用时没有由换行符终止的先前输出时会出现问题。

#include <stdio.h>
#include <readline/readline.h>

void main(void)
{
  // Previous output from some other part of application
  // which *may* have output stuff *not* terminated with a '\n'
  printf("Hello ");
  fflush(stdout);

  char *in = readline("OK> ");
}
Run Code Online (Sandbox Code Playgroud)

所以这条线看起来像:

Hello OK> <caret here>
Run Code Online (Sandbox Code Playgroud)

如果您键入少量字符(最多 5 个?),然后说Ctrl+U(可能是其他字符)删除您的输入,到目前为止一切似乎都很好 ---readline()将插入符号移回到它自己的提示之后,即删除5 个字符。但是,请尝试输入,例如:

123456 <Ctrl+U>
Run Code Online (Sandbox Code Playgroud)

现在,它会删除回Hello,只留下Hell就行了,然后插入符号,即删除6 + 6 = = 12。所以你看:

Hello OK> 123456 <Ctrl+U>
Hell<caret …
Run Code Online (Sandbox Code Playgroud)

c readline libreadline

6
推荐指数
1
解决办法
623
查看次数

Homebrew pyenv 安装错误 dyld:库未加载:/usr/local/opt/readline/lib/libreadline.7.dylib

在 MacOS Mojave 上从 Homebrew 安装 pyenv 后,我在尝试安装任何 python 版本时遇到构建错误。

运行pyenv install任何版本时,构建都会失败并显示错误:

dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
  Referenced from: /usr/local/bin/awk
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

python macos homebrew libreadline pyenv

6
推荐指数
2
解决办法
1621
查看次数

Ruby行编辑telnet服务器

我在Ruby中实现了一个小的telnet服务器.我目前面临的问题是我想添加readline支持,以便我可以使用tab-completion和命令行历史记录支持.我查看了Readline库,但似乎它只能通过stdin工作.有没有办法在Ruby中这样做(我注意到Python的解决方案)?

ruby sockets telnet libreadline

5
推荐指数
1
解决办法
651
查看次数

没有这样的文件加载 - readline(加载错误)

当我想执行Rails 3控制台时,它抛出这个:

$ script/rails c
/usr/local/rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/irb/completion.rb:9:in `require': no such file to load -- readline (Load Error)
Run Code Online (Sandbox Code Playgroud)

我试着安装libreadline-dev:

$ sudo wajig install libreadline-dev
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
  libncurses5-dev libreadline6-dev
Se instalarán los siguientes paquetes NUEVOS:
  libncurses5-dev libreadline-dev libreadline6-dev
0 actualizados, 3 se instalarán, 0 para eliminar y 6 no actualizados.
Necesito descargar 1799kB de archivos.
Se utilizarán 7266kB de espacio de disco …
Run Code Online (Sandbox Code Playgroud)

readline libreadline ruby-on-rails-3

5
推荐指数
3
解决办法
4843
查看次数

如何将已修补的 GNU readline 库正确链接到所有现有程序?

我最初的问题是,我想要一种方法来区分在 vi 模式下使用 bash 时是处于 vi 命令模式还是 vi 插入模式。据我所知,从 GNU readline 7.0 开始,有一种方法可以在命令提示符中设置指示器;然而,我想要的是改变光标的形状(即在插入模式下为垂直线,在命令模式下为实心块)。


注意: 我已经尝试将以下内容放入我的 .inputrc 中,这确实起到了作用,但在命令模式下移回行首时引起了一些问题,所以我得出的结论是这不是一个好的选择。

set show-mode-in-prompt on
set vi-cmd-mode-string "\e[2 q"
set vi-ins-mode-string "\e[6 q"
Run Code Online (Sandbox Code Playgroud)


我看到一篇由有同样问题的人写的文章,最终决定自己修补 GNU readline 库,链接如下:

http://blog.mkoskar.com/2010/10/gnu-readline-vi-mode-visualization.html http://blog.mkoskar.com/2010/11/gnu-readline-vi-mode-visualization-2 .html


到目前为止,我已经能够成功应用补丁并编译/安装库(在本地...我更愿意保留安装的未打补丁的版本,以防我想切换回来),但 bash 似乎仍在使用原来的。

以下是重要细节:

1)修补后的库文件(静态和动态)位于我的计算机上的$HOME/.local/lib/
2)我确定的原始库文件(仅限动态)位于/lib/x86_64-linux-gnu/
3) 我的 LD_LIBRARY_PATH 环境变量设置$HOME/.local/lib:为我的 .bashrc 中。


即使安装了修补版本并且正确设置了 LD_LIBRARY_PATH 变量,Bash 似乎仍然不使用我修补的 GNU readline 库。我想知道我是否做错了什么?

我希望问题不是 Bash 附带的 readline 库已经静态链接,我想,需要我重新安装 Bash(以及使用该库的任何其他程序,例如 iPython),在修补版本中手动链接阅读线。


解决方案

虽然不是标题中列出的问题的解决方案,但这是我遇到的原始问题的解决方案。浏览 Readline 的手册页后,我发现了以下关于vi-cmd-mode-string和 的描述vi-ins-mode-string

vi-cmd-mode-string ((cmd)) …
Run Code Online (Sandbox Code Playgroud)

bash terminal readline libreadline

5
推荐指数
0
解决办法
2101
查看次数

标签 统计

libreadline ×10

readline ×6

c ×3

bash ×2

macos ×2

c++ ×1

cygwin ×1

gnu ×1

homebrew ×1

mingw ×1

perl ×1

pthreads ×1

pyenv ×1

python ×1

ruby ×1

ruby-on-rails-3 ×1

sockets ×1

telnet ×1

terminal ×1

windows ×1