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では面倒でした。