2010-09-23 3 views
7

Je tente de compiler le code C qui utilise ce qui suit dans la ligne de lecture GNU.Comment puis-je référencer correctement la bibliothèque GNL readline pour analyser l'entrée du terminal?

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

J'ai essayé de changer le <> à "" et la compilation avec et sans les -lreadline options. Rien ne semble fonctionner. Lors de la compilation sans -lreadline sous gcc résultats dans ce qui suit sont générés lors de la compilation (bavard):

Reading specs from /software/gcc-3.4.6-0/pkg/lib/gcc/i386-unknown-freebsd6.1/3.4.6/specs 
Configured with: ../gcc-3.4.6/configure --prefix=/software/gcc-3.4.6-0/pkg --disable-dependency-tracking --localstatedir=/var --disable-nls --program-suffix=34 --enable-shared --enable-version-specific-runtime-libs 
Thread model: posix 
gcc version 3.4.6 
/software/gcc-3.4.6-0/pkg/libexec/gcc/i386-unknown-freebsd6.1/3.4.6/cc1 -quiet -v myshell.c -quiet -dumpbase myshell.c -auxbase myshell -version -o /var/tmp//ccVSq3jQ.s 
ignoring nonexistent directory "/software/gcc-3.4.6-0/pkg/lib/gcc/i386-unknown-freebsd6.1/3.4.6/../../../../i386-unknown-freebsd6.1/include" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/local/include 
/software/gcc-3.4.6-0/pkg/include 
/software/gcc-3.4.6-0/pkg/lib/gcc/i386-unknown-freebsd6.1/3.4.6/include 
/usr/include 
End of search list. 
GNU C version 3.4.6 (i386-unknown-freebsd6.1) 
     compiled by GNU C version 3.4.6. 
GGC heuristics: --param ggc-min-expand=99 --param ggc-min-heapsize=129976 
as -o /var/tmp//ccl1Jaqk.o /var/tmp//ccVSq3jQ.s 
/software/gcc-3.4.6-0/pkg/libexec/gcc/i386-unknown-freebsd6.1/3.4.6/collect2 -V -dynamic-linker /libexec/ld-elf.so.1 -L/software/gcc-3.4.6-0/pkg/lib/gcc/i386-unknown-freebsd6.1 -o a /usr/lib/crt1.o /usr/lib/crti.o /software/gcc-3.4.6-0/pkg/lib/gcc/i386-unknown-freebsd6.1/3.4.6/crtbegin.o -L/software/gcc-3.4.6-0/pkg/lib/gcc/i386-unknown-freebsd6.1/3.4.6 -L/software/gcc-3.4.6-0/pkg/lib/gcc/i386-unknown-freebsd6.1/3.4.6/../../.. /var/tmp//ccl1Jaqk.o -lreadline -lgcc -lgcc_eh -lc -lgcc -lgcc_eh /software/gcc-3.4.6-0/pkg/lib/gcc/i386-unknown-freebsd6.1/3.4.6/crtend.o /usr/lib/crtn.o 
/usr/bin/ld: cannot find -lreadline 
GNU ld version 2.15 [FreeBSD] 2004-05-23 
    Supported emulations: 
    elf_i386_fbsd 
collect2: ld returned 1 exit status 

C'est la sortie lors de la compilation sans l'option -lreadline.

/var/tmp//ccNnucSC.o(.text+0x4f): In function `main': 
: undefined reference to `readline' 
collect2: ld returned 1 exit status 

Je n'ai pas réussi à résoudre cette erreur jusqu'à ce point. Que manque-t-il dans mon code ou lors de l'invocation de gcc?

Répondre

9

Lors de la compilation sous UNIX, je trouve ce qui suit est nécessaire de référencer correctement la bibliothèque GNU readline:

gcc code.c -L/usr/local/lib -I/usr/local/include -lreadline 

Cela garantit que le compilateur trouve les readline répertoires et fichiers lors de la compilation et reliant.

6

Il semble que vous n'ayez pas installé les bibliothèques de développement libreadline. Sur Debian (y compris le port FreeBSD), la bibliothèque se trouve dans/lib et les bibliothèques de développement (que vous lieriez) se trouvent dans/usr/lib.

De plus, vous avez des points-virgules après vos inclusions, que vous ne devriez pas avoir.

+0

J'ai oublié de mentionner dans ma question que la bibliothèque est en effet correctement installée et située sous le chemin __ */usr/local/include * __. – XBigTK13X

+0

Ouais, je vois d'après votre réponse qu'il a été installé dans/usr/local/lib qui, étonnamment, n'était pas inclus dans votre chemin de bibliothèque par défaut (habituellement/usr/local est d'abord vérifié). –

Questions connexes