35

私は、独自の LISP ( http://www.buildyourownlisp.com/chapter4_interactive_prompt ) の構築に関するこのチュートリアルに取り組んでおり、何らかの理由でコンパイルしようとすると、次のようになります。

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

macOS 開発者ツールをインストールしましたが、brew は readline がインストールされていることを示しており、brew install editline を試行しても何をすべきかわかりません。

これは私のコードです:

  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 } 

それは明らかに非常に基本的なことですが、私は本当にこのプロジェクトを進めたいと思っているので、これを理解できることを願っています. これは私がコンパイルするために使用しているものです:

cc -std=c99 -Wall REPL.c -ledit -o REPL
4

8 に答える 8

4

私は El Capitan を使用していて、 Remove#include <editline/history.h>を使用cc -std=c99 -Wall test.c -ledit -o testしています。
出力フラグの前にフラグを追加し-leditます。これはリンク プロセスであり、コンパイラが editline への呼び出しをプログラムに直接埋め込むことができるようにします。または、次のエラー メッセージが表示されます。

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
于 2015-12-30T04:39:34.933 に答える
3

私はUbuntu 14.04を使用しています。

これを試して:

sudo apt-get install libeditline-dev

次のように含めます。

#include <editline.h>

最後に次のようにコンパイルします。

-leditlineフラグを追加する

これが役立つことを願っています。

于 2015-03-03T13:47:26.063 に答える
2

私はOSX Mavericksを使用していますが、行を削除するとうまくいきました:

#include <editline/history.h>
于 2014-04-07T20:39:12.273 に答える
0

Debian Buster 10 では、次のパッケージをインストールする必要がありました。

sudo apt install libeditline-dev 

それ以外の:

#include <editline/readline.h>
#include <editline/history.h>

私はちょうど含めました:

#include <editline.h>

-leditline フラグを付けてプログラムを実行すると、完全に機能しました。

于 2020-11-19T15:21:00.850 に答える