Как мне ссылаться на библиотеку readline GNU, а не на libedit в macosx? - PullRequest
7 голосов
/ 27 августа 2011

Попытка собрать Term-Readline-Gnu на macosx, не жалуется на libedit и не рекомендует использовать gnu readline. Как мне это сделать?

Это одна из попыток, которые я попробовал:

Сначала я статически собрал GNU libreadline v6.2, но не установил его - для убедитесь, что я не испортил версию системы с тем же именем:

. / Configure --prefix = / Users / Fred / Downloads / tmp1

сделать

make install-static

Затем попытался собрать Term_Readline-Gnu-1.20

cmc: Term-ReadLine-Gnu-1,20 cmc $ perl Makefile.PL --includedir = / Пользователи / cmc / Загрузки / tmp1 / include --libdir = / Пользователи / Fred / Загрузки / tmp1 / lib

Найдено `/usr/lib/libtermcap.dylib'.

gcc-4.2 -I / Users / Fred / Downloads / tmp1 / include -arch x86_64 -arch i386 -arch ppc -g -pipe -fno-common -DPERL_DARWIN -fno-строгого псевдонима -I / usr / local / include -DHAVE_STRING_H rlver.c -o rlver -L / Пользователи / Fred / Downloads / tmp1 / lib -arch x86_64 -arch i386 -arch ppc -L / usr / local / lib -lreadline -ltermcap

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

Используемая вами libreadline - это библиотека libedit. Используйте GNU Библиотека Readline.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

Chris

Ответы [ 3 ]

7 голосов
/ 02 декабря 2013

Здесь - это потрясающий пост, объясняющий, как решить проблему ОП, выполнив несколько простых шагов:

brew install readline

brew link --force readline

cpanm Term::ReadLine::Gnu

brew unlink readline

Проверка

brew info readline | head -1
0 голосов
/ 31 июля 2013

Итак, чтобы решить старый вопрос, я только что решил / решил эту проблему.

Как говорит MisterEd, вам нужна библиотека GNU readline.Однако, когда вы делаете Term::Readline::Gnu, вам также нужно убедиться, что архитектура библиотеки readline GNU совместима с вашей архитектурой perl, потому что perl компилирует свои модули, используя ключи компилятора, с которыми он был скомпилирован.

InOS X, если вы установите альтернативный perl с использованием порта или fink, вы получите двоичный файл perl, скомпилированный только для вашей архитектуры (i386 ИЛИ x86_64).В этом случае ответ MisterEd: «Хорошо».

Однако, как видно из приведенного выше вывода, спрашивающий использует Perl, скомпилированный как универсальный двоичный файл (-arch i386 -arch x86_64) -наверное системный по умолчанию Perl.В моем случае я использовал perlbrew для создания более новой версии perl, но мне нужно было, чтобы он был универсальным, чтобы я мог отправлять вещи на другие машины OS X, поэтому я проделал некоторую работу по созданию универсальной сборки.

В этих случаях вам нужно скомпилировать библиотеку Gnu Readline вручную с некоторыми дополнительными переключателями.Я сделал это:

GNU readline:

./configure CFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" \
LDFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" ./configure \
--prefix=/usr/local; make

По какой-то причине make потерпел неудачу на одном из последних этапов создания общей библиотеки .dylib, но на тот момент она уже была собранаlibreadline.a, который я скопировал в /usr/local/lib.

Term :: Readline :: Gnu:

Затем я скачал .tar.gz для Term :: Readline ::Гну и сделал:

perl Makefile.PL --libdir='/usr/local/lib'; make; make install
0 голосов
/ 11 ноября 2011

Может показаться, что библиотека readline GNU находится не в /Users/Fred/Downloads/tmp1/lib.

Сначала убедитесь, что библиотека установлена.Если у вас есть порты Mac:

sudo port install readline

На моей машине port устанавливает вещи в /opt, поэтому я запустил:

perl Makefile.PL --includedir=/opt/local/include --libddir=/opt/local/lib
...