Драгоценный камень Ruby
Я не могу, для жизни меня, успешно запустить "gem install thrift", что не удается при создании родных расширений 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
Я видел много подобных ошибок в Интернете, но я не нашел решения. Я запускаю OS X 10.9 с новой установкой rvm/ruby-2.0.0-p247. Есть идеи?
Спасибо.
Ответы
Ответ 1
вопрос на данный момент можно найти на https://issues.apache.org/jira/browse/THRIFT-2219
В качестве временного исправления для людей, использующих драгоценные камни, вы можете попробовать установить # define'a макроса _FORTIFY_SOURCE в 0, чтобы сделать strlcpy функцией, а не макросом:
gem install thrift -- --with-cppflags='-D_FORTIFY_SOURCE=0'
или если вы используете bundler, вы можете установить cflags для бережливости локально через:
bundle config build.thrift --with-cppflags='-D_FORTIFY_SOURCE=0'
Ответ 2
В OS 10.9.4 команда ниже работала для меня
bundle config build.thrift "--with-cppflags=-D_FORTIFY_SOURCE=0"
Ответ 3
вместо использования обходного пути с cppflags Я совершил исправление, которое проверяет __has_builtin (strlcpy), и если встроенные функции недоступны в системе, но strlcpy определен, то он использует externs, как это делалось ранее. работает на os x 10.8, 10.9, centos, ubuntu,...
Ответ 4
Пожалуйста, отредактируйте файл ~/.bundle/config, тогда он выглядит так:
---
BUNDLE_BUILD__THRIFT: "--with-cppflags=\"-D_FORTIFY_SOURCE=0 -Wno-shift-negative-value\""
Он работает для меня, спасибо.