2013-10-29 17 views
11

Nie mogę, dla mojego życia, z powodzeniem uruchomić "gem install thrift", rzecz kończy się niepowodzeniem podczas budowania natywnych rozszerzeń gem; to jest wyjście:Thrift Ruby gem

(acib708) ~ -> gem install thrift 
Building native extensions. This could take a while... 
ERROR: Error installing thrift: 
    ERROR: Failed to build gem native extension. 

    /Users/acib708/.rvm/rubies/ruby-2.0.0-p247/bin/ruby extconf.rb 
extconf.rb:25:in `<main>': Use RbConfig instead of obsolete and deprecated Config. 
extconf.rb:25:in `<main>': Use RbConfig instead of obsolete and deprecated Config. 
checking for strlcpy() in string.h... yes 
creating Makefile 

make "DESTDIR=" 
compiling binary_protocol_accelerated.c 
compiling bytes.c 
compiling compact_protocol.c 
compiling memory_buffer.c 
compiling protocol.c 
compiling strlcpy.c 
             ^

(...)

In file included from strlcpy.c:20: 
./strlcpy.h:28:15: error: conflicting types for '__builtin___strlcpy_chk' 
/usr/include/secure/_string.h:105:3: note: expanded from macro 'strlcpy' 
    __builtin___strlcpy_chk (dest, src, len, __darwin_obsz (dest)) 
^
./strlcpy.h:28:15: note: '__builtin___strlcpy_chk' is a builtin with type 'unsigned long (char *, const char *, unsigned long, unsigned long)' 
/usr/include/secure/_string.h:105:3: note: expanded from macro 'strlcpy' 
    __builtin___strlcpy_chk (dest, src, len, __darwin_obsz (dest)) 
^
4 errors generated. 
make: *** [strlcpy.o] Error 1 


Gem files will remain installed in /Users/acib708/.rvm/gems/ruby-2.0.0-p247/gems/thrift-0.9.1 for inspection. 
Results logged to /Users/acib708/.rvm/gems/ruby-2.0.0-p247/gems/thrift-0.9.1/ext/gem_make.out 

Widziałem wiele podobnych błędów całym internecie, ale nie znalazłem rozwiązania. Używam systemu OS X 10.9, ze świeżą instalacją rvm/ruby-2.0.0-p247. Jakieś pomysły? Dzięki.

+1

Czy XCode jest aktualny? – Vidya

+0

Tak, najnowsza wersja. – acib708

+2

@ AlejandroCárdenas Proszę przyjąć jedną z odpowiedzi. Ci ciężko pracujący ludzie starają się ci pomóc, wystarczy kliknąć na ikonę znacznika wyboru, dzięki – nhed

Odpowiedz

56

problem w tej chwili można znaleźć na https://issues.apache.org/jira/browse/THRIFT-2219

jako tymczasowym rozwiązaniem dla ludzi korzystających z klejnotów, można spróbować ustawić # define'ing makro _FORTIFY_SOURCE na 0, aby strlcpy funkcję zamiast makra :

gem install thrift -- --with-cppflags='-D_FORTIFY_SOURCE=0' 

lub jeśli używasz Bundler można ustawić CFLAGS dla oszczędności lokalnie poprzez:

bundle config build.thrift --with-cppflags='-D_FORTIFY_SOURCE=0' 
+1

Dzięki. To działało dla mnie. – arnab

+3

Udało się również dla mnie! Uruchomiłem komendę 'bundle config', a następnie ponownie uruchomiłem' bundle install' i działało świetnie. –

+0

To jest niesamowite, dzięki! –

3

zamiast używać workaro und z cppflags Zrobiłem poprawkę, która sprawdza __has_builtin (strlcpy) i jeśli wbudowane nie są dostępne w systemie, ale strlcpy jest zdefiniowany, to używa externs tak jak poprzednio. działa na OS X 10.8, 10.9, CentOS, Ubuntu, ...

6

Na OS 10.9.4 polecenie poniżej pracował dla mnie

bundle config build.thrift "--with-cppflags=-D_FORTIFY_SOURCE=0" 
0

Proszę edytować ~/.bundle/config plik następnie to wygląda tak:

--- 
BUNDLE_BUILD__THRIFT: "--with-cppflags=\"-D_FORTIFY_SOURCE=0 -Wno-shift-negative-value\"" 

To działa dla mnie, dzięki.