前田です。 In message "[ruby-list:4850] Re: _muldi3 included in libgcc.a(Re: rbc.rb)" "EGUCHI Osamu" <eguchi / shizuokanet.or.jp> wrote: |> :通常 _muldi3 は、 libgcc.a に含まれています。 |> |> なるほど. gcc -shared だと -lgcc とかがつかないんだ. |> -lgcc を追加するのが簡単ですね. | |たぶんそれでもうまく行きます。。 最初-lgccを付けただけではやはり同じ症状でしたので, #ifdef linux static void dummy() { __muldi3(); __moddi3(); __divdi3(); } #endif としたらSegmentation faultしてしまいました:-( _muldi3.oなどをlibgcc.aから取り出して直接リンクしてもやはり Segmentation faultしてしまいました。 (gdb) run ../../ruby/rbc.rb Starting program: /home/shugo/src/ruby-1.1a9/ruby ../../ruby/rbc.rb rbc0> require 'java' Program received signal SIGSEGV, Segmentation fault. 0x402f24c3 in _sched_unlock () at ../../../../src/genunix/java/green_threads/src/signals.c:585 ../../../../src/genunix/java/green_threads/src/signals.c:585: No such file or directory. (gdb) bt #0 0x402f24c3 in _sched_unlock () at ../../../../src/genunix/java/green_threads/src/signals.c:585 #1 0x402f18c1 in sysMonitorEnter () at ../../../../src/genunix/java/green_threads/src/monitor_md.c:337 #2 0x402f0a33 in open () at ../../../../src/genunix/java/green_threads/src/iomgr.c:1461 #3 0x402f0a51 in open () |どうも libjava は、古い(あるいは改造された) gcc でコンパイル |されているのではないかと思います。 Javaをコンパイルし直すのがてっとり早いような気がするのですが, きっとソースを貰うためにはライセンスを受けたりしないといけな いのでしょうね...。 |別件ですが Java の long って gcc の long long でないですか? |手元に動く Java の処理系がないので、確認できないのですが。 |もし long long と、jri:ext/java/java.c の INT2NUM() で |jlong を 変換しているあたりでオーバーフローしますね。 sizeof(jlong): 8 でした:-( LONGLONG2NUMとか用意しないといけないですね...。 -- 前田 修吾