使用mkmf.rb时,在Linux上构建源自Ruby 1.9.2的问题

时间:2012-06-26 07:46:51

标签: ruby mkmf

我使用vanilla ./configure命令在Fedora 16上构建了Ruby 1.9.2-p320, 安装在/ 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源,但如果有人可以的话 告诉我如何在try_func方法中转储headers变量 可能会有帮助。

奇怪的是我在构建其他二元宝石方面没有遇到任何麻烦 到目前为止,包括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':

我应该想到 - crypt和openssl库已经成为了 对Fedora的麻烦。

1 个答案:

答案 0 :(得分:-1)

通过查看mkmf.log找到答案。仍然没有工作,但这是另一个问题。