2012-10-15 20 views
6

Próbuję użyć bundle do instalacji klejnotów wymaganych dla mojego nowego projektu, ale mam problem z instalacją wersji 1.1.5 klejnotu "ffi".Problemy z instalowaniem klejnotu Ruby "ffi" na serwerze Ubuntu 12.04

Używam Ruby 1.9.3 działa na wirtualnej instalacji 64-bitowego Ubuntu Server 12.04. Podczas uruchamiania komendy bundle, pojawia się następujący komunikat o błędzie:

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. 

     /home/alex/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb 
checking for ffi.h... no 
checking for ffi.h in /usr/local/include,/usr/include/ffi... no 
checking for rb_thread_blocking_region()... yes 
checking for ruby_native_thread_p()... yes 
checking for rb_thread_call_with_gvl()... yes 
creating extconf.h 
creating Makefile 

make 
Configuring libffi 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux"SampleRails 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux'ems/[email protected] 
make "AR_FLAGS=" "CC_FOR_BUILD=" "CFLAGS=-Wall -fexceptions" "CXXFLAGS=" "CFLAGS_FOR_BUILD=" "CFLAGS_FOR_TARGET=" "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m 644" "INSTALL_PROGRAM=/usr/bin/install -c" "INSTALL_SCRIPT=/usr/bin/install -c" "JC1FLAGS=" "LDFLAGS=" "LIBCFLAGS=" "LIBCFLAGS_FOR_TARGET=" "MAKE=make" "MAKEINFO=/b/gems/ffi-1.1.5/ext/ffi_c/libffi/missing --run makeinfo " "PICFLAG=" "PICFLAG_FOR_TARGET=" "RUNTESTFLAGS=" "SHELL=/bin/bash" "exec_prefix=/usr/local" "infodir=/usr/local/share/info" "libdir=/usr/local/lib" "mandir=/usr/local/share/man" "prefix=/usr/local" "AR=ar" "AS=as" "CC=gcc" "CXX=g++" "LD=/usr/bin/ld -m elf_x86_64" "NM=/usr/bin/nm -B" "RANLIB=ranlib" "DESTDIR=" all-recursive 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux'ems/[email protected] 
Making all in include 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux/include'[email protected] 
make[3]: Nothing to be done for `all'. 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux/include'[email protected] 
Making all in testsuite 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux/testsuite'[email protected] 
make[3]: Nothing to be done for `all'. 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux/testsuite'[email protected] 
Making all in man 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux/man'[email protected] 
make[3]: *** No rule to make target `ffi.3', needed by `all-am'. Stop. 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux/man'[email protected] 
make[2]: *** [all-recursive] Error 1 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux'ms/[email protected] 
make[1]: *** [all] Error 2 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux'ms/[email protected] 
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux"/.libs/libffi_convenience.a] Error 2 


/gems/ffi-1.1.5 for inspection. in /home/alex/.rvm/gems/[email protected] 
/gems/ffi-1.1.5/ext/ffi_c/gem_make.out/[email protected] 
An error occurred while installing ffi (1.1.5), and Bundler cannot continue. 
Make sure that `gem install ffi -v '1.1.5'` succeeds before bundling. 

Błąd wydaje się być spowodowane przez linię make[3]: *** No rule to make target 'ffi.3', needed by 'all-am' ale jestem żaden mądrzejszy, co to znaczy.

Czy ktoś może mi pomóc? Z góry dziękuję!

+0

Czy próbowałeś go zainstalować bez pakietu? gem install ffi? – corroded

+0

Niestety mam dokładnie ten sam problem. Linia przed pierwszym wierszem błędu wygląda na to, że generuje stronę podręcznika, z której mógłbym szczęśliwie żyć bez - więc jeśli istnieje sposób na usunięcie tych części pliku Makefile, byłbym z tego zadowolony. – ultrafez

+0

co powiesz na instalację gem ffi --no-ri --no-rdoc? – corroded

Odpowiedz

13

Zainstaluj pakiet libffi-dev:

sudo apt-get install libffi-dev 

Klejnot FFI zbuduje swoją wewnętrzną bibliotekę libffi jeśli nie może znaleźć lib nagłówki/link dla libffi, który na nowoczesnym systemie Linux jest nigdy co chcesz - po prostu zainstaluj pakiety deweloperskie systemu.

+0

Fantastyczne - to działało idealnie. Dziękuję bardzo! Czy dzieje się tak w przypadku większości klejnotów, że zbudują własne biblioteki wewnętrzne, jeśli nie są jeszcze zainstalowane w systemie? – ultrafez

+1

To w dużej mierze zależy od klejnotu. Używając ffi, dodałem wewnętrzną kopię libffi, ponieważ używał niektórych funkcji z (w tym czasie) libffi z krwawiącymi krawędziami. Większość systemów linuksowych jest teraz dostarczana z dostatecznie niedawnym libffi, ale nadal jest przydatna dla innych systemów, które w ogóle nie wysyłają libffi. –

Powiązane problemy