わたなべです。

Masahiro TANAKA <masa / ir.isas.ac.jp> writes:

:> cygwinとmingwに関しては、--export-all-symbolsかdefファイルで
:> 必要なシンボルをexportしてA.soを作っておけば、インポートライ
:> ブラリを作らなくてもGNU LDは直接A.soをリンクできます。結局の
:> ところ上記undefinedになるOSと同じようことですが。
:> #でも流石に.soはまずそう。
:
:CygwinでNArrayを他の拡張ライブラリからリンクするとき、
:defファイルだけではうまくいかなかったので、extconf.rb に
:
:if RUBY_PLATFORM =~ /cygwin|mingw/
:  CONFIG["DLDFLAGS"] << " --output-lib libnarray.a"
:end
:
:と書いてインポートライブラリ?を作るようにしましたが、
:他にもっと良い方法があるんでしょうか。

えっと、インポートライブラリなして直接リンクできるというのは
こういうことです。

% objdump -p narray.so |grep na_make_object
        [  19] na_make_object
% echo 'main(){ na_make_object(); }' >main.c
% gcc -c main.c
% gcc -shared main.o narray.so -o main.so
main.o(.text+0xc):main.c: undefined reference to `na_make_object'
collect2: ld returned 1 exit status
% ln -s narray.so narray.dll
% gcc -shared main.o narray.dll -o main.so
%

.soだとだめなのが痛いんですが、cygwinならsymlinkで済みます。
これがいい方法かというと全くもっていい方法とは思えないんです
けど。

どっちにしても、個々にextconf.rbで対応するよりはそのあたりの
仕組みをmkmf.rbに入れたほうがいいんだろうなと思ってます。

あ、ついでにソースとは別ディレクトリでビルドするときのパッチ
もつけときます。
-- 
わたなべひろふみ

--- depend.orig Sun Apr 8 06:59:55 2001 +++ depend Thu May 30 13:20:04 2002 @@ -1,3 +1,3 @@ na_op.c: mknafunc.rb mkop.rb - $(RUBY) mkop.rb + $(RUBY) -I$(srcdir) $(srcdir)/mkop.rb @@ -7,3 +7,3 @@ na_math.c: mknafunc.rb mkmath.rb - $(RUBY) mkmath.rb + $(RUBY) -I$(srcdir) $(srcdir)/mkmath.rb --- extconf.rb.orig Sat May 18 01:17:43 2002 +++ extconf.rb Thu May 30 13:33:19 2002 @@ -40,3 +40,3 @@ archdir = dest.sub(/sitelibdir/,"sitearchdir").sub(/rubylibdir/,"archdir") - path = ['narray.h','narray_config.h'] + path = ['$(srcdir)/narray.h','narray_config.h'] path << ['libnarray.a'] if RUBY_PLATFORM =~ /cygwin|mingw/