![]() |
I am working on a command line interpretter for linux.(I use fedora
core 1 and am coding in c).I am trying to implement the history features for the commans typed at the command line.I am using the <readline/readline.h> & <readline/history.h> header files.When i try to compile the following program (given in gnu manual) using gcc or cc compilers I get the following error (though i have included all the necessary header files,including the ones mentioned above: /tmp/ccmh5Xy8.o(.text+0x25): In function `main': : undefined reference to `using_history' /tmp/ccmh5Xy8.o(.text+0x107): In function `main': : undefined reference to `history_expand' /tmp/ccmh5Xy8.o(.text+0x16d): In function `main': : undefined reference to `add_history' /tmp/ccmh5Xy8.o(.text+0x1f0): In function `main': : undefined reference to `write_history' /tmp/ccmh5Xy8.o(.text+0x220): In function `main': : undefined reference to `read_history' /tmp/ccmh5Xy8.o(.text+0x248): In function `main': : undefined reference to `history_list' /tmp/ccmh5Xy8.o(.text+0x29c): In function `main': : undefined reference to `history_base' /tmp/ccmh5Xy8.o(.text+0x307): In function `main': : undefined reference to `remove_history' collect2: ld returned 1 exit status The program is as follows: #include <stdio.h> #include <readline/history.h> main (argc, argv) int argc; char **argv; { char line[1024], *t; int len, done = 0; line[0] = 0; using_history (); while (!done) { printf ("history$ "); fflush (stdout); t = fgets (line, sizeof (line) - 1, stdin); if (t && *t) { len = strlen (t); if (t[len - 1] == '\n') t[len - 1] = '\0'; } if (!t) strcpy (line, "quit"); if (line[0]) { char *expansion; int result; result = history_expand (line, &expansion); if (result) fprintf (stderr, "%s\n", expansion); if (result < 0 || result == 2) { free (expansion); continue; } add_history (expansion); strncpy (line, expansion, sizeof (line) - 1); free (expansion); } if (strcmp (line, "quit") == 0) done = 1; else if (strcmp (line, "save") == 0) write_history ("history_file"); else if (strcmp (line, "read") == 0) read_history ("history_file"); else if (strcmp (line, "list") == 0) { register HIST_ENTRY **the_list; register int i; the_list = history_list (); if (the_list) for (i = 0; the_list[i]; i++) printf ("%d: %s\n", i + history_base, the_list[i]->line); } else if (strncmp (line, "delete", 6) == 0) { int which; if ((sscanf (line + 6, "%d", &which)) == 1) { HIST_ENTRY *entry = remove_history (which); if (!entry) fprintf (stderr, "No such entry %d\n", which); else { free (entry->line); free (entry); } } else { fprintf (stderr, "non-numeric arg given to `delete'\n"); } } } } Your help will be greatly appreciated. gautamshetty |
Do you link with -lreadline? Including headers will only supply declarations. It's the library that gives you definitions.
|
I will try it out and keep you posted.Thanks for the reply.
gautamshetty |
Thanks eggbert!
yeah including -lreadline worked.thanks for the help pal. gautamshetty |
| All times are GMT -5. The time now is 1:58 AM. |
Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC