“readline/readline.h”文件未找到。

87

我已经包含了:

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

我的编译器包含标志

-lreadline

但我仍然收到错误信息:

fatal error: 'readline/readline.h' file not found

我正尝试使用函数readline();

更详细的定义在这里: http://linux.die.net/man/3/readline


你使用的是哪个操作系统/版本? - Tim
你的编译器在哪个路径中查找包含文件?(通常包括/usr/include)。readline/readline.h是否存在于该路径中?(例如,/usr/include/readline/readline.h)。如果不存在,请通过-I添加正确的路径。(例如,如果你已经将readline安装在/usr/local中,则需要在编译器调用中添加-I/usr/local/include)。 - William Pursell
@TimCastelijns 2013 x86_64 x86_64 x86_64 GNU/Linux - timeshift117
@WilliamPursell 我不能包含任何不太具备平台独立性的本地文件,因为这必须在其他系统上使用,在那些系统上我将无法控制安装了什么。 - timeshift117
其实,我认为你可能是对的 @WilliamPursell,谢谢。 - timeshift117
如果您不能假设所有运行您的软件的系统都安装了readline,那么您就不能使用readline(除非您能够将readline代码合并到您的程序中)。 - Keith Thompson
2个回答

198

你提到了Linux发行版,因此需要安装readline开发库。

在基于Debian的平台上,例如Ubuntu,您可以运行:

sudo apt-get install libreadline-dev 

这样就会在正确的位置安装正确的头文件。

如果您使用带有yum的平台,例如SUSE,则命令应该是:

yum install readline-devel

2
谢谢,这个方法有效,但是当我去掉了 -lreadline 后它就不行了,所以我又把它加回去了。我正在使用 clang 进行编译,不确定这是否是我必须保留它的原因。在最短时间结束时,我会接受您的答案。 - timeshift117
1
@timeshift117 - 你说得很对,它确实需要在那里。仅仅为了找到头文件,你不需要链接任何东西,但是为了使用函数,你需要链接readline库。包含头文件却不使用是毫无意义的,所以我从答案中将其删除了。 - Mike
你能告诉我-dev是什么意思吗? - Suraj Jain
1
@SurajJain -dev-devel 后缀表示开发人员的源代码和头文件。没有 dev 的软件包仅包含已编译的二进制文件。 - DenisKolodin

3
这个命令在我遇到完全相同的问题时帮助了我,当时我正在使用Linux Mint操作系统。
gcc filename.c -L/usr/include -lreadline -o filename

你可以使用别名,如果你需要多次编译它。例如:
alias compilefilename='gcc filename.c -L/usr/include -lreadline -o filename'

-L 选项用于指定库目录,而非头文件。 - stark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接