Проблемы со встроенным из исходного Ruby 1.9.2 в Linux, при использовании mkmf.rb

Я собрал Ruby 1.9.2-p320 на Fedora 16 с помощью команды vanilla ./configure, установив в / usr / local

Файлы включения находятся в /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, но если кто-то может сказать мне, как вывести переменную headers в метод 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-параметр -Wno-круглые скобки -Wpointer-arith -Wwrite- строки -Wno-missing-field-initializer -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): в функции `__md5_crypt_r':
(.text+0x96): неопределенная ссылка на`NSSLOW_Init'
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../libcrypt.a(md5-crypt.o): в функции `__md5_crypt_r ':

Я должен был подумать об этом - библиотеки crypt и openssl были проблемой на Fedora.

1 ответ

Ответ нашел, посмотрев в mkmf.log. Все еще не работает, но это еще одна проблема.

Другие вопросы по тегам