如何链接GNU readline库而不是macosx中的libedit?

时间:2011-08-27 11:55:46

标签: macos perl gnu readline libreadline

尝试在macosx上构建Term-Readline-Gnu,无法抱怨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 = / 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 Library。

     

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

克里斯

3 个答案:

答案 0 :(得分:7)

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

brew install readline

brew link --force readline

cpanm Term::ReadLine::Gnu

brew unlink readline

检查

brew info readline | head -1

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

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

但是,正如您从上面的输出中看到的那样,提问者正在使用被编译为通用二进制文件的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

现在由于某种原因,在创建.dylib共享库的最后一步之一上失败了,但此时它已经构建了libreadline.a,我将其复制到/ usr / local / lib。

期限::的Readline ::羚:

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

perl Makefile.PL --libdir='/usr/local/lib'; make; make install