2010-09-23 41 views
7

我试图编译在GNU readline中使用以下内容的C代码。如何正确引用GNU readline库来扫描终端输入?

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

我试图改变<>“”两者有和没有-lreadline选项编译。似乎没有任何工作。

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 

这是输出而不-lreadline选项编译时:当没有-lreadlineGCC编译编译时(详细)产生结果在下面。

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

到目前为止,我一直无法解决此错误。我在代码或调用gcc时缺少什么?

回答

9

在UNIX下编译我发现下面是要正确引用GNU的readline库:

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

这确保了编译器发现编译期间的readline目录和文件和链接。

6

这听起来像你没有安装libreadline开发库。在Debian上(包括FreeBSD的端口),这个库位于/ lib,开发库(你会链接到)位于/ usr/lib目录下。

此外,你包含后,你有分号,你不应该有。

+0

我忘了在我的问题中提到库确实安装正确并位于路径__ */usr/local/include * __下。 – XBigTK13X 2010-09-23 23:26:50

+0

是的,我从你的答案中看到,它被安装到了/ usr/local/lib中,有些令人惊讶的是它没有被包含在默认库路径中(通常先检查/ usr/local)。 – 2010-09-23 23:41:24