2011-08-27 17 views
7

Cố gắng xây dựng Term-Readline-Gnu trên macosx, không phàn nàn về libedit và đề xuất sử dụng gnu readline. Làm thế nào để làm điều đó?Làm cách nào để liên kết với thư viện readline GNU thay vì libedit trong macosx?

Đây là một trong những nỗ lực tôi đã cố gắng:

Trước tiên tôi xây dựng libreadline v6.2 GNU tĩnh nhưng không cài đặt nó - để chắc chắn rằng tôi không vít lên phiên bản hệ thống có cùng tên:

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

làm

make install-tĩnh

Sau đó cố gắng để xây dựng Term_Readline-Gnu-1,20

cmc: Term-ReadLine-Gnu-1.20 cmc $ perl Makefile.PL --includedir =/Users/cmc/Downloads/tmp1/include --libdir =/Người dùng/Fred/Tải xuống/tmp1/lib

Tìm thấy `/usr/lib/libtermcap.dylib '.

gcc-4.2 -I/Người dùng/Fred/Tải xuống/tmp1/bao gồm -arch x86_64 -arch i386 -arch ppc -g -pipe -fno-common-DPERL_DARWIN -không-đúng-bí danh -I/usr/địa phương/bao gồm -DHAVE_STRING_H rlver.c -o rlver -L/Người dùng/Fred/Tải/tmp1/lib -arch x86_64 -arch i386 -arch ppc -L/usr/local/lib -lreadline -ltermcap

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

Dòng libreadline bạn đang sử dụng là thư viện libedit. Sử dụng thư viện Readline GNU .

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

Chris

Trả lời

0

Nó sẽ xuất hiện thư viện GNU readline không có trong /Users/Fred/Downloads/tmp1/lib.

Trước tiên hãy đảm bảo thư viện được cài đặt. Nếu bạn có Mac cổng:

sudo port install readline 

Trên máy tính của tôi port cài đặt điều cần /opt, vì vậy tôi chạy:

perl Makefile.PL --includedir=/opt/local/include --libddir=/opt/local/lib 
0

Vì vậy, để Drudge lên một câu hỏi cũ, tôi chỉ có/giải quyết vấn đề này.

Như MisterEd nói, bạn cần thư viện readline GNU. Tuy nhiên khi bạn đang thực hiện Term::Readline::Gnu, bạn cũng cần đảm bảo rằng kiến ​​trúc thư viện readline của GNU tương thích với kiến ​​trúc perl của bạn, vì perl biên dịch các mô đun của nó bằng cách sử dụng các trình biên dịch trình biên dịch được biên dịch.

Trong OS X, nếu bạn cài đặt một perl thay thế bằng cổng hoặc fink, bạn sẽ nhận được một nhị phân perl được biên dịch chỉ dành cho kiến ​​trúc của bạn (i386 OR x86_64). Trong trường hợp đó, câu trả lời của MisterEd là A-OK.

Tuy nhiên, như bạn có thể thấy từ đầu ra ở trên, người hỏi đang sử dụng một Perl được biên dịch dưới dạng nhị phân chung (-arch i386 -arch x86_64) - có thể là Perl mặc định của hệ thống. Trong trường hợp của tôi, tôi đã sử dụng perlbrew để xây dựng một phiên bản mới hơn của perl, nhưng tôi cần nó là phổ quát để tôi có thể chuyển mọi thứ đến các máy OS X khác, vì vậy tôi đã trải qua một số công việc để tạo ra một công trình chung.

Trong những trường hợp này, bạn cần phải biên dịch thư viện Readline Gnu bằng tay với một số công tắc phụ. Tôi đã làm điều này:

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 

Bây giờ đối với một số lý do, làm cho thất bại trên một trong những bước cuối cùng tạo ra các thư viện .dylib chia sẻ, nhưng tại thời điểm đó nó đã được xây dựng libreadline.a, mà tôi đã sao chép vào/usr/local/lib.

Term :: Readline :: Gnu:

Sau đó, tôi đã tải về .tar.gz cho Term :: Readline :: Gnu và đã làm:

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

Điều này cho phép bạn sử dụng tất cả các phím tắt mô tả [ở đây] (http://www.howtogeek.com/howto/ubuntu/keyboard- phím tắt-cho-bash-command-shell-cho-ubuntu-debian-suse-redhat-linux-etc /) trên toàn bộ hệ thống OSX của bạn? – mbigras

+0

Không chắc vì tôi không biết ứng dụng/tiện ích OSX nào sử dụng thuật ngữ :: Readline :: Gnu. Bạn có thể thử giải pháp của ông L dưới đây, và xem những gì xảy ra - nó xuất hiện để mã cứng việc sử dụng thư viện readline Gnu vào Term :: Readline :: Gnu nên hoàn thành điều tương tự. – Colin

7

Here là một bài tuyệt vời giải thích làm thế nào để khắc phục vấn đề OP trong vài bước đơn giản:

brew install readline

brew link --force readline

cpanm Term::ReadLine::Gnu

brew unlink readline

Kiểm tra

brew info readline | head -1 
+0

"cpan Term :: ReadLine :: Gnu" thay vì cpanm – StandardNerd