【问题标题】:How do I link against the GNU readline library rather than libedit in macosx?如何链接到 GNU readline 库而不是 macosx 中的 libedit?
【发布时间】:2011-08-27 11:55:46
【问题描述】:

尝试在 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 阅读线库。

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

克里斯

【问题讨论】:

    标签: macos perl gnu readline libreadline


    【解决方案1】:

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

    brew install readline

    brew link --force readline

    cpanm Term::ReadLine::Gnu

    brew unlink readline

    检查

    brew info readline | head -1
    

    【讨论】:

    • "cpan Term::ReadLine::Gnu" 而不是 cpanm
    【解决方案2】:

    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
    

    【讨论】:

      【解决方案3】:

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

      正如 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 中。

      Term::Readline::Gnu:

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

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

      【讨论】:

      • 这是否允许您在整个 OSX 系统上使用 here 描述的所有快捷方式?
      • 不确定,因为我不知道哪些 OSX 应用程序/实用程序使用 Term::Readline::Gnu。您可以在下面尝试 L 先生的解决方案,看看会发生什么 - 它似乎将 Gnu readline 库的使用硬编码到 Term::Readline::Gnu 中,所以应该完成同样的事情。
      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多