2011-08-27 88 views
7

試圖在macosx上構建Term-Readline-Gnu,無法抱怨libedit並建議使用gnu readline。我怎麼做?如何在macosx中鏈接GNU readline庫而不是libedit?

這是我試過的嘗試之一:

首先我建GNU libreadline V6.2靜態,但並沒有安裝它 - 到 確保我沒有搞砸的系統版本使用相同的名稱:

的./configure --prefix = /用戶/弗雷德/下載/ TMP1

使

使安裝靜電

然後試圖建立Term_Readline-GNU-1.20

CMC:期限-的ReadLine-GNU-1.20 CMC $ perl的Makefile.PL --includedir = /用戶/ CMC /下載/ TMP1 /包括--libdir = /用戶/佛瑞德/下載/ TMP1/lib中

實測值`/usr/lib/libtermcap.dylib」。

GCC-4.2 -I /用戶/佛瑞德/下載/ TMP1 /包括-arch x86_64的-arch I386 -arch PPC -g -pipe -fno共用-DPERL_DARWIN -fno嚴格混疊-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。

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

克里斯

回答

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 
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的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的期限:: Readline庫:: GNU和做的:

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

這是否讓你使用說明(這裏)的所有快捷方式(http://www.howtogeek.com/howto/ubuntu/keyboard-你的整個OSX系統上的快捷方式爲bash-command-shell-for-ubuntu-debian-suse-redhat-linux-etc /)? – mbigras

+0

不確定,因爲我不知道哪些OSX應用程序/實用程序使用Term :: Readline :: Gnu。你可以試試下面的L先生的解決方案,看看會發生什麼 - 它似乎將Gnu readline庫的使用硬編碼到Term :: Readline :: Gnu中,所以應該完成同樣的事情。 – Colin

7

Here是一個真棒文章,解釋如何修復OP的問題在幾個簡單的步驟:

brew install readline

brew link --force readline

cpanm Term::ReadLine::Gnu

brew unlink readline

檢查

brew info readline | head -1 
+0

「cpan Term :: ReadLine :: Gnu」 而不是cpanm – StandardNerd

相關問題