编译 Readline 时对 "tputs" 的未定义引用
Undefined reference to "tputs" on compiling Readline
我想在 Ubuntu 上编译安装 readline 库。
我执行以下操作:
wget http://git.savannah.gnu.org/cgit/readline.git/snapshot/readline-8.0.tar.gz
tar -zxvf readline-8.0.tar.gz
cd readline-8.0
./configure --prefix=`pwd`/readline
make
make install
没错,但是当我使用 -lreadline
选项时,我得到这样的错误:
readline/lib/libreadline.so: undefined reference to `tputs'
readline/lib/libreadline.so: undefined reference to `tgoto'
readline/lib/libreadline.so: undefined reference to `tgetflag'
readline/lib/libreadline.so: undefined reference to `UP'
readline/lib/libreadline.so: undefined reference to `tgetent'
readline/lib/libreadline.so: undefined reference to `tgetnum'
readline/lib/libreadline.so: undefined reference to `PC'
readline/lib/libreadline.so: undefined reference to `tgetstr'
我想知道我做错了什么,为什么以及该怎么办?
如果你能帮助我,我将不胜感激。
显然,您缺少 link 反对 readline
所依赖的库。在我的系统上我得到
$ readelf --dynamic --symbols --wide /usr/lib64/libreadline.so.7.0 | fgrep tputs
17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tputs
即tputs
是 readline
代码中的外部引用。
编辑: 库将是 libtinfo
:
$ readelf --dynamic --symbols --wide /usr/lib64/libtinfo.so.6 | fgrep tputs
199: 0000000000019a30 151 FUNC GLOBAL DEFAULT 12 tputs
245: 00000000000195f0 930 FUNC GLOBAL DEFAULT 12 tputs_sp
所以解决方案是使用 -lreadline -ltinfo
。
一般来说,我建议不要自己编译库,而是安装 Linux 发行版提供的 -dev(el)
包。然后你可以使用例如pkg-config
命令自动发现库的正确 C 标志和 linker 选项。
我想在 Ubuntu 上编译安装 readline 库。
我执行以下操作:
wget http://git.savannah.gnu.org/cgit/readline.git/snapshot/readline-8.0.tar.gz
tar -zxvf readline-8.0.tar.gz
cd readline-8.0
./configure --prefix=`pwd`/readline
make
make install
没错,但是当我使用 -lreadline
选项时,我得到这样的错误:
readline/lib/libreadline.so: undefined reference to `tputs'
readline/lib/libreadline.so: undefined reference to `tgoto'
readline/lib/libreadline.so: undefined reference to `tgetflag'
readline/lib/libreadline.so: undefined reference to `UP'
readline/lib/libreadline.so: undefined reference to `tgetent'
readline/lib/libreadline.so: undefined reference to `tgetnum'
readline/lib/libreadline.so: undefined reference to `PC'
readline/lib/libreadline.so: undefined reference to `tgetstr'
我想知道我做错了什么,为什么以及该怎么办?
如果你能帮助我,我将不胜感激。
显然,您缺少 link 反对 readline
所依赖的库。在我的系统上我得到
$ readelf --dynamic --symbols --wide /usr/lib64/libreadline.so.7.0 | fgrep tputs
17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tputs
即tputs
是 readline
代码中的外部引用。
编辑: 库将是 libtinfo
:
$ readelf --dynamic --symbols --wide /usr/lib64/libtinfo.so.6 | fgrep tputs
199: 0000000000019a30 151 FUNC GLOBAL DEFAULT 12 tputs
245: 00000000000195f0 930 FUNC GLOBAL DEFAULT 12 tputs_sp
所以解决方案是使用 -lreadline -ltinfo
。
一般来说,我建议不要自己编译库,而是安装 Linux 发行版提供的 -dev(el)
包。然后你可以使用例如pkg-config
命令自动发现库的正确 C 标志和 linker 选项。