对’readline’的未定义引用

我在尝试运行维基百科中 提供的GNU Readline库示例代码时遇到问题。 它来了:

#include  #include  #include  #include  #include  int main() { char* input, shell_prompt[100]; // Configure readline to auto-complete paths when the tab key is hit. rl_bind_key('\t', rl_complete); for(;;) { // Create prompt string from user name and current working directory. snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024)); // Display prompt and read input (nb input must be freed after use)... input = readline(shell_prompt); // Check for EOF. if (!input) break; // Add input to history. add_history(input); // Do stuff... // Free input. free(input); } } 

我正在创建一个受限制的环境,因为readline不可用,所以我必须下载源代码,编译它并将其安装到我的家庭目录。

这是我的主目录中的结构:

 .local ├── include │  └── readline │    ├── chardefs.h │    ├── history.h │    ├── keymaps.h │    ├── readline.h │    ├── rlconf.h │    ├── rlstdc.h │    ├── rltypedefs.h │    └── tilde.h └── lib  ├── libhistory.a  ├── libhistory.so -> libhistory.so.6  ├── libhistory.so.6 -> libhistory.so.6.2  ├── libhistory.so.6.2 ├── libreadline.a  ├── libreadline.so -> libreadline.so.6  ├── libreadline.so.6 -> libreadline.so.6.2  └── libreadline.so.6.2 

问题是,当我调用gcc时,它会抛出一个错误:

 $ gcc hello.c -o hello_c.o -I /home/my-home-dir/.local/include /tmp/cckC236E.o: In function `main': hello.c:(.text+0xa): undefined reference to `rl_complete' hello.c:(.text+0x14): undefined reference to `rl_bind_key' hello.c:(.text+0x60): undefined reference to `readline' hello.c:(.text+0x77): undefined reference to `add_history' collect2: error: ld returned 1 exit status 

这里有一个答案,但我没有使用Netbeans,我不太确定如何在命令行上指定库的路径。

我试图告诉链接器库的位置,但结果仍然相同:

 $ gcc hello.c -o hello_c.o -I /home/my-home-dir/.local/include -Xlinker "-L /home/my-home-dir/.local/lib" /tmp/cceiePMr.o: In function `main': hello.c:(.text+0xa): undefined reference to `rl_complete' hello.c:(.text+0x14): undefined reference to `rl_bind_key' hello.c:(.text+0x60): undefined reference to `readline' hello.c:(.text+0x77): undefined reference to `add_history' collect2: error: ld returned 1 exit status 

我在这里可能缺少什么想法?

您需要使用gcc参数中的-lreadline来链接实际库