Проблемы со встроенным из исходного 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. Все еще не работает, но это еще одна проблема.