2013-10-29 25 views
11

Tôi không thể, cho cuộc sống của tôi, chạy thành công "đá quý cài đặt tiết kiệm", điều không thành công khi xây dựng các phần mở rộng bản địa của đá quý; đây là kết quả:Tiết kiệm đá quý Ruby

(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 

Tôi đã nhìn thấy rất nhiều lỗi tương tự khắp nơi trên web, nhưng tôi đã không tìm thấy giải pháp. Tôi đang chạy OS X 10.9, với cài đặt rvm/ruby-2.0.0-p247 mới. Ý tưởng nào? Cảm ơn.

+1

XCode có được cập nhật không? – Vidya

+0

Có, phiên bản mới nhất. – acib708

+2

@ AlejandroCárdenas Vui lòng chấp nhận một trong các câu trả lời. Những người làm việc chăm chỉ này đã kịp thời giúp bạn, một cú nhấp chuột vào biểu tượng dấu kiểm là tất cả những gì bạn cần, cảm ơn – nhed

Trả lời

56

vấn đề cho thời điểm này có thể được tìm thấy tại https://issues.apache.org/jira/browse/THRIFT-2219

Là một sửa chữa tạm thời cho những người sử dụng đá quý, bạn có thể thử thiết lập # define'ing vĩ mô _FORTIFY_SOURCE 0 để làm strlcpy một chức năng chứ không phải là một vĩ mô :

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

hoặc nếu bạn đang sử dụng bundler, bạn có thể thiết lập các CFLAGS cho tiết kiệm tại địa phương thông qua:

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

Cảm ơn. Điều này làm việc cho tôi. – arnab

+3

Cũng làm việc cho tôi! Tôi chạy lệnh 'bundle config' và sau đó chạy lại' bundle install' và nó hoạt động rất tốt. –

+0

Điều này thật tuyệt vời, cảm ơn! –

3

hơn là sử dụng một workaro und với cppflags Tôi cam kết một sửa chữa mà kiểm tra cho __has_builtin (strlcpy) và nếu xây dựng không có sẵn trên hệ thống nhưng strlcpy được định nghĩa sau đó nó sử dụng externs như nó đã làm trước đó. hoạt động trên os x 10,8, 10,9, centos, ubuntu, ...

6

Trên OS 10.9.4 lệnh dưới đây làm việc cho tôi

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

hãy chỉnh sửa ~/.bundle/config tập tin sau đó có vẻ như sau:

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

Nó phù hợp với tôi, cảm ơn.

Các vấn đề liên quan