Неопределенная ссылка на "tputs" при компиляции Readline - PullRequest
0 голосов
/ 27 января 2019

Я хочу скомпилировать инсталлируемую библиотеку readline в Ubuntu.

Я делаю следующее:

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'

Я хочу знать, что я сделал неправильно, почему и что делать?

Буду признателен, если вы мне поможете.

1 Ответ

0 голосов
/ 27 января 2019

Очевидно, что вам не хватает ссылки на библиотеку, на которую 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.

В целом, я бы предложил не компилировать библиотеки самостоятельно, а вместо этого установить пакеты -dev(el), предоставляемые вашим дистрибутивом Linux. Тогда вы можете использовать, например, pkg-config команда для автоматического обнаружения правильных флагов C и параметров компоновщика для библиотеки.

...