えぐち です ---------- > 差出人 : Shugo Maeda <shugo / po.aianet.ne.jp> > 件名 : [ruby-list:4852] Re: _muldi3 included in libgcc.a(Re: rbc.rb) > > 前田です。 > > 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してしまいました。 linux はまったく知らないのですが、 linux の歴史の中で libgcc.so とか libgcc.sl とかが 存在した時期がありませんか? やっぱ libgcc.a の _muldi3.o が -fpic でないせいかな? gcc のソースから libgcc2.c を取ってきてリンクするなり ソースに埋め込むなりするとどうでしょうか? (構造体の未定義でコンパイルかも) > |どうも libjava は、古い(あるいは改造された) gcc でコンパイル > |されているのではないかと思います。 > > Javaをコンパイルし直すのがてっとり早いような気がするのですが, > きっとソースを貰うためにはライセンスを受けたりしないといけな > いのでしょうね...。 これはやっぱ、難しいいのでは、、 > |別件ですが Java の long って gcc の long long でないですか? > |手元に動く Java の処理系がないので、確認できないのですが。 > |もし long long と、jri:ext/java/java.c の INT2NUM() で > |jlong を 変換しているあたりでオーバーフローしますね。 > > sizeof(jlong): 8 > > でした:-( > LONGLONG2NUMとか用意しないといけないですね...。 gcc 以外の処理系でも64bit-intに対応させる必要があるか 悩むところですが(あるでしょうね)、、 longlong2inum() を bignum.c に用意しますか? #それとなく見てみると、bignum.c:uint2big() は、 #大きな大きな整数を考慮したコーディングだったりする。 #考えられてますね>まつもと さん。 えぐち