尝试在macosx上构建Term-Readline-Gnu,失败抱怨libedit并建议使用gnu readline。我怎么做呢?
这是我尝试过的其中一个:
首先,我静态地构建了GNU libreadline v6.2,但没有将其安装到确保我没有把同名的系统版本搞砸:
。弗雷德/configure——prefix =/用户//下载/tmp1
使
让install-static
然后尝试构建Term_Readline-Gnu-1.20
克里斯cmc:Term-ReadLine-Gnu-1.20——includedir =/用户/cmc/下载/tmp1/包括——libdir =/用户/弗雷德/下载/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 - have_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
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
您使用的libedit库是libedit库。使用GNUReadline库。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
这是一篇很棒的文章,解释了如何在几个简单的步骤中解决OP的问题:
brew install readline
brew link --force readline
cpanm Term::ReadLine::Gnu
brew unlink readline
brew info readline | head -1
看起来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
所以,为了重提一个老问题,我刚刚解决了这个问题。
正如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 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。
条件::Readline:: Gnu:
然后我下载了Term::Readline::Gnu的。tar.gz文件并做了:
perl Makefile.PL --libdir='/usr/local/lib'; make; make install