Mam problem z próbą uruchomienia kodu biblioteki przykładowy kod available in wikipedia. Tu idzie:niezdefiniowane odwołanie do `readline '
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <readline/readline.h>
#include <readline/history.h>
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 (n.b. 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);
}
}
pracuję w ograniczonym środowisku były readline nie był dostępny, więc musiałem ściągnąć źródła, skompilować i zainstalować go do mojego domu reż.
Jest to struktura w moim katalogu domowym:
.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
Problem jest, gdy zgłoszę gcc to wyrzuca mi błąd:
$ 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
jest odpowiedź o tym here, ale Nie używam Netbeans i nie jestem pewien, jak określić ścieżkę do biblioteki w wierszu poleceń.
próbowałem powiedzieć linker gdzie biblioteki, ale wynik jest wciąż ten sam:
$ 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
pomysłów co mogę być tu brakuje?
Trzeba połączyć bibliotekę, więc umieścić '-lreadline' zbliża się do końca swojej poleceniem' gcc' (i prawdopodobnie '-l. local/lib' before). Aby uzyskać '* .o' z' * .c' użyj 'gcc -Wall -c -g hello.c -o hello.o' –
użyj -ledit do readline i add_history – yet