2015-06-09 6 views
0

Я новичок в языке C и продолжаю получать эту ошибку всякий раз, когда компилирую свой код C с помощью команды cc prompt.c. Я получаю эту ошибку:Ошибки Editline

Undefined symbols for architecture x86_64:

"_add_history", referenced from:

_main in prompt-66f61f.o 

"_readline", referenced from:

_main in prompt-66f61f.o 

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

Вот мой код:

#include <stdio.h> 
#include <stdlib.h> 

#include <editline/readline.h> 


int main(int argc, char** argv) { 

    /* Print Version and Exit Information */ 
    puts("Lispy Version 0.0.0.0.1"); 
    puts("Press Ctrl+c to Exit\n"); 

    /* In a never ending loop */ 
    while (1) { 

    /* Output our prompt and get input */ 
    char* input = readline("lispy> "); 

    /* Add input to history */ 
    add_history(input); 

    /* Echo input back to user */  
    printf("No you're a %s\n", input); 

    /* Free retrieved input */ 
    free(input); 

    } 

    return 0; 
} 

Я пишу эту программу на Macbook Air работает OSX 10.10.3, если это помогает.

Я только начинаю изучать язык C, поэтому не судите меня, если этот вопрос действительно прост, результатов, когда я его искал, не было.

Любая помощь была бы принята с благодарностью. Благодаря!

+0

Что вы компиляции на? – cehnehdeh

ответ

1

Вам необходимо связать свою программу с библиотекой editline, чтобы ваш линкер нашел определение функций readline и add_history.

Вы можете сделать это, указав библиотеку с -l флагом в вашей команде компиляции:

cc prompt.c -ledit 
+0

Я попробовал то, что вы сказали, и получил ту же ошибку. – TheBestCoder

+0

@TheBestCoder Вы выполняли инструкции на веб-сайте ['editline'] (http://thrysoee.dk/editline/)? Кажется, вам также нужно включить '-lcurses'. – emlai

+0

@ TheBestCoder Также, если у вас есть 'pkg-config', вы можете просто выполнить' \ 'pkg-config -libs -cflags libedit \' 'вместо флагов' -l', которые будут расширяться до соответствующих флагов. – emlai