7

尝试在 macosx 上构建 Term-Readline-Gnu,抱怨 libedit 并建议使用 gnu readline 失败。我怎么做?

这是我尝试过的尝试之一:

首先,我静态构建了 GNU libreadline v6.2,但没有安装它——以确保我没有搞砸同名的系统版本:

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

制作

使安装静态

然后尝试构建 Term_Readline-Gnu-1.20

cmc:Term-ReadLine-Gnu-1.20 cmc$ perl Makefile.PL --includedir=/Users/cmc/Downloads/tmp1/include --libdir=/Users/Fred/Downloads/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-strict-aliasing -I/usr/local/include -DHAVE_STRING_H rlver.c -o rlver -L/Users/Fred/Downloads/tmp1/lib -arch x86_64 -arch i386 -arch ppc -L/usr/local/lib -lreadline -ltermcap

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

您使用的 libreadline 是 libedit 库。使用 GNU Readline 库。

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

克里斯

4

3 回答 3

7

是一篇很棒的帖子,解释了如何通过几个简单的步骤解决 OP 的问题:

brew install readline

brew link --force readline

cpanm Term::ReadLine::Gnu

brew unlink readline

查看

brew info readline | head -1
于 2013-12-02T01:01:12.663 回答
0

看来 GNU readline 库不在/Users/Fred/Downloads/tmp1/lib.

首先确保库已安装。如果您有 Mac 端口:

sudo port install readline

在我的机器上port安装东西/opt,所以我跑了:

perl Makefile.PL --includedir=/opt/local/include --libddir=/opt/local/lib
于 2011-11-11T17:53:50.123 回答
0

所以,为了解决一个老问题,我刚刚/解决了这个问题。

正如 MisterEd 所说,您需要 GNU readline 库。但是,当您制作时Term::Readline::Gnu,您还需要确保 GNU readline 库体系结构与您的 perl 体系结构兼容,因为 perl 使用编译它的编译器开关来编译它的模块。

在 OS X 中,如果您使用 port 或 fink 安装备用 perl,您将获得仅针对您的体系结构(i386 或 x86_64)编译的 perl 二进制文件。在这种情况下,MisterEd 的回答是 A-OK。

但是,正如您从上面的输出中看到的那样,发问者使用的 Perl 被编译为通用二进制文件 (-arch i386 -arch x86_64) - 可能是系统默认的 Perl。在我的例子中,我使用 perlbrew 来构建一个更新版本的 perl,但我需要它是通用的,这样我就可以将东西运送到其他 OS X 机器上,所以我做了一些工作来构建一个通用的构建。

在这些情况下,您需要使用一些额外的开关手动编译 Gnu Readline 库。我这样做了:

GNU阅读线:

./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 中。

术语::Readline::Gnu:

然后我为 Term::Readline::Gnu 下载了 .tar.gz 并做了:

perl Makefile.PL --libdir='/usr/local/lib'; make; make install
于 2013-07-31T17:58:28.887 回答