簡體   English   中英

錯誤:function 'rl_replace_line' 的隱式聲明在 C99 中無效 [-Werror,-Wimplicit-function-declaration]

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

我試圖在我的代碼中實現 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]

但是我認為我使用了好的 header 文件? 這是我的代碼:

# 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);
}

我不明白為什么它不起作用,我希望你們能幫助謝謝!

我設法通過包含正確的路徑來解決我的問題:

-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

我通過使用命令 ==> find / -name libreadline.a 2> /dev/null 找到 libreadline.a 來解決這個問題。

結果是 ==> /opt/homebrew/Cellar/readline/8.1.2/lib/libreadline.a

所以我把正確的編譯路徑:-L libs -lft -L /opt/homebrew/Cellar/readline/8.1.2/lib -lreadline。

不,這是完美的工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM