Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

editline/history.h and editline/readline.h not found/working on macOS when trying to compile with developer tools installed already

I am working on this tutorial on building your own LISP (http://www.buildyourownlisp.com/chapter4_interactive_prompt) and for some reason when I try to compile I get this:

REPL.c:4:10: fatal error: 'editline/readline.h' file not found
#include <editline/history.h>
^
1 error generated.

I have installed the macOS developer tools, and brew is showing readline is installed and it doesn't know what to do when I try brew install editline.

This is my code:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <editline/readline.h>
  4 #include <editline/history.h>
  5 
  6 int main(int argc, char** argv) {
  7      
  8   /* version/exit info */
  9   puts("Edward Version 0.0.1");
 10   puts("Press Ctrl+c to Exit\n");
 11          
 12   /* endless loop for main REPL */
 13   while (1) { 
 14     /* output prompt and read line */
 15     char* input = readline("lispy> ");
 16                   
 17     /* put input in history  */
 18     add_history(input);
 19                       
 20     /* Echo input back */                          
 21     printf("No you're a %s\n", input);
 22                       
 23     /* free input */
 24     free(input);
 25   }                           
 26   return 0;
 27 } 

It is obviously very basic, but I really want to get this project rolling so I'm hoping I can figure this out. This is what I'm using to compile:

cc -std=c99 -Wall REPL.c -ledit -o REPL
like image 717
yburyug Avatar asked Apr 05 '14 20:04

yburyug


4 Answers

Include only

#include <editline/readline.h> 

which should exist if the command line tools are installed. This file contains the "readline wrapper" for libedit, including the history functions as well. An include file <editline/history.h> does not exist on OS X.

I tested your code with that modification, and it compiled and ran without problems.

like image 140
Martin R Avatar answered Oct 16 '22 07:10

Martin R


Using OSX Yosemite. I removed #include<editline/history.h>

and then used cc -std=c99 -Wall test.c -ledit -o test

Works fine now

like image 28
naivecitizen Avatar answered Oct 16 '22 06:10

naivecitizen


I'm on El Capitan, Remove #include <editline/history.h>, and use cc -std=c99 -Wall test.c -ledit -o test works for me.
Add the flag -ledit before the output flad, it's a linking process, allows the compiler to directly embed calls to editline in your program. Or, you'll get the below error message,

Undefined symbols for architecture x86_64:
  "_add_history", referenced from:
      _main in prompt-086f90.o
  "_readline", referenced from:
      _main in prompt-086f90.o
ld: symbol(s) not found for architecture x86_64
like image 41
Rachel Avatar answered Oct 16 '22 07:10

Rachel


I'm on Ubuntu 14.04.

try this:

sudo apt-get install libeditline-dev

and include like this:

#include <editline.h>

finally compile like this:

add -leditline in the flag

I hope this can help.

like image 41
shuxiong Avatar answered Oct 16 '22 06:10

shuxiong