2012-06-26 3 views
0

я построил на 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.

+0

Я думаю, что вы должны быть в состоянии предоставить необязательные include dirs для процедуры установки с чем-то вроде 'gem install mysql2 - --with-opt-include =/usr/local/include/ruby-1.9.1'. – Casper

+0

Спасибо, но это не сработало. Я смог построить/установить местный жемчуг (0.2.11), но камень был сломан. mysql2.rb требует «mysql2/mysql2.rb», которого не существует. Я удалил жемчужину, и выполнение предлагаемой команды привело к той же проблеме: «проверка на rb_thread_blocking_region() ... no» – Eric

+0

Вы говорите, что можете построить conftest с соответствующими параметрами. Какие подходящие варианты вы используете? Кроме того, там нет mkmf.log? – Casper

ответ

-1

Ответ найденный путем поиска в mkmf.log. Все еще не работает, но это еще одна проблема.