0

Ruby 1.9.2-p320 を Fedora 16 上にバニラの ./configure コマンドでビルドし、/usr/local にインストールしました

インクルードファイルは /usr/local/include/ruby-1.9.1 にあります

このプログラムは「いいえ」と言います:

require 'mkmf'
puts have_func('rb_thread_blocking_region') ? "yes" : "no"

rb_thread_blocking_region が存在するかどうかを確認するために conftest.c をビルドするコマンド ラインに、/usr/local/include/ruby-1.9.1 の下のさまざまなディレクトリへの -I パスが含まれていないため、ビルドが失敗するためだと思います。ただし、mkmf はカスタム ロガーを使用しており、一部のメソッドに $stderr.puts ステートメントを追加しようとすると、出力が表示されないか、必要があることを示すエラー メッセージが表示されるため、よくわかりません。開発ツールをインストールします。私は多くの開発ツールとRubyソースを備えたLinuxを使用していますが、誰かがtry_funcメソッドでヘッダー変数をダンプする方法を教えてくれれば役立つかもしれません.

奇妙なことに、RMagick を含む他のバイナリ gem を今までビルドするのに問題はありませんでしたが、rb_thread_blocking_region が存在しないと考えているため、mysql2 で立ち往生しているため、誤ったコードが生成されます。

もう少し掘り下げてみると、適切な -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-括弧  
    -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):  
    関数 `__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では面倒でした。

4

1 に答える 1

-1

mkmf.logを調べて答えを見つけました。まだ機能していませんが、それは別の問題です。

于 2012-06-26T22:49:14.070 に答える