я построил на Ruby 1.9.2-P320 на Fedora 16 с командой ванили ./configure, установкой в / USR/местныеПроблем со встроенным из-источника Руби 1.9.2 на Linux, при использовании mkmf.rb
включаемой файлы находятся в /usr/local/include/ruby-1.9.1
Эта программа говорит «нет»:
require 'mkmf'
puts have_func('rb_thread_blocking_region') ? "yes" : "no"
Я думаю, это потому, что командная строка для создания conftest.c чтобы увидеть, существует ли rb_thread_blocking_region, не включает в себя путь -I к различные каталоги под /usr/local/include/ruby-1.9.1, поэтому сборка не удалась. Я не уверен, хотя, потому что mkmf использует собственный логгер, и в любое время, когда я пытаюсь добавить инструкции $ stderr.puts к некоторым из методов , я либо не вижу вывода, либо получаю это сообщение об ошибке , говорящее мне Мне нужно установить инструменты для разработки. Я на Linux с много инструментов для разработчиков на месте, плюс источник Ruby, но если кто-то может скажите мне, как сбрасывать переменную заголовков в методе try_func, что может быть полезно .
Странная вещь у меня не было никаких проблем строит другие двоичные камни до сих пор, в том числе RMagick, но я застрял на mysql2, как он считает, что rb_thread_blocking_region не существует, поэтому он создает неправильный код.
Копаем немного больше, я могу скомпилировать эту программу с соответствующими параметрами -I, поэтому rb_thread_blocking_region определенно существует.
$ cat conftest.c
#include "ruby.h"
int main(int argc, char **argv) { return 1; }
int t() {
void ((*volatile p)());
p = (void ((*)())) rb_thread_blocking_region;
return 0;
}
Ааа, вот проблема, из mkmf.log:
"gcc -o conftest -I/usr/local/include/ruby-1.9.1/i686-linux -I/usr/local/include/ruby-1.9.1/ruby/backward -I/usr/local/include/ruby-1.9.1 -I. -I/usr/local/include/ruby-1.9.1/ -D_FILE_OFFSET_BITS=64 -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long conftest.c -L. -L/usr/local/lib -Wl,-R/usr/local/lib -L. -rdynamic -Wl,-export-dynamic -Wl,-R -Wl,/usr/local/lib -L/usr/local/lib -lruby-static -lpthread -lrt -ldl -lcrypt -lm -lc" /usr/lib/gcc/i686-redhat-linux/4.6.3/../../../libcrypt.a(md5-crypt.o): In function `__md5_crypt_r': (.text+0x96): undefined reference to `NSSLOW_Init' /usr/lib/gcc/i686-redhat-linux/4.6.3/../../../libcrypt.a(md5-crypt.o): In function `__md5_crypt_r':
Я должен был подумать об этом - склеп и библиотеки OpenSSL были нервотрепки на Fedora.
Я думаю, что вы должны быть в состоянии предоставить необязательные include dirs для процедуры установки с чем-то вроде 'gem install mysql2 - --with-opt-include =/usr/local/include/ruby-1.9.1'. – Casper
Спасибо, но это не сработало. Я смог построить/установить местный жемчуг (0.2.11), но камень был сломан. mysql2.rb требует «mysql2/mysql2.rb», которого не существует. Я удалил жемчужину, и выполнение предлагаемой команды привело к той же проблеме: «проверка на rb_thread_blocking_region() ... no» – Eric
Вы говорите, что можете построить conftest с соответствующими параметрами. Какие подходящие варианты вы используете? Кроме того, там нет mkmf.log? – Casper