【问题标题】:error: implicit declaration of function 'rl_replace_line' is invalid in C99 [-Werror,-Wimplicit-function-declaration]错误:函数“rl_replace_line”的隐式声明在 C99 [-Werror,-Wimplicit-function-declaration] 中无效
【发布时间】:2021-06-16 13:05:56
【问题描述】:

我试图在我的代码中实现 rl_replace_line() 但是当我尝试像这样编译它时:

gcc -lreadline test.c -o test

我收到此错误消息:

error: implicit declaration of function 'rl_replace_line' is invalid in C99 [-Werror,-Wimplicit-function-declaration]

但是我认为我使用了好的头文件? 这是我的代码:

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

char    *get_line()
{
    char *line;

    line = NULL;
    if (line)
    {
        free(line);
        line = NULL;
    }
    line = readline("Minishell>");
    if (line)
        add_history(line);
    return (line);
}

void    sig_handler(int signum)
{
    if (signum == SIGINT)
    {
        printf("\n");
        rl_on_new_line();
        rl_replace_line("", 0);
        rl_redisplay();
    }
}

int main(void)
{
    char    *line;

    signal(SIGINT, sig_handler);
    line = get_line();
    printf("%s\n", line);
}

我不明白为什么它不起作用,希望大家帮忙谢谢!

【问题讨论】:

  • 这是唯一导致错误的函数吗?该函数是否在您包含的 readline 相关标头中声明?可能你安装的 readline 版本没有这个功能。
  • 这些是我找到的唯一 readline 标题,我会尝试看看是否是版本问题
  • 这些头文件是否包含该函数的声明?
  • 试试gcc test.c -o test -lreadline 看看它是否有所作为。链接器选项应该放在编译器选项之后。
  • rl_replace_line 函数是在 2002 年发布的 Readline-4.3 中添加的。

标签: c gcc compiler-errors readline


【解决方案1】:

我设法通过包含正确的路径来解决我的问题:

-L .brew/opt/readline/lib-I .brew/opt/readline/include

现在我像这样编译并且它正在工作:

gcc test.c -o test -lreadline -L .brew/opt/readline/lib -I .brew/opt/readline/include

【讨论】:

  • 注意这是因为 brew 拒绝链接 readline。警告:拒绝链接 macOS 提供/隐藏的软件:readline 要让编译器找到 readline,您可能需要设置:export LDFLAGS="-L/usr/local/opt/readline/lib" export CPPFLAGS="-I/usr/local /opt/readline/include"
猜你喜欢
  • 2021-10-06
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多