shelarcy
shela****@capel*****
2004年 6月 27日 (日) 18:47:26 JST
On Sat, 26 Jun 2004 23:02:53 -1000 (HST), Shiro Kawai <shiro****@lava*****> wrote: >> Boost.Build で分けてコンパイルしているのが悪いのか…… >> >> C:/develop/Gauche-0.8/boost/../src/main.c:302: undefined reference to >> `Scm_PairClass' >> >> とのエラーがでますが、gauche.h で定義されているのに Scm_PairClass >> が見つからないってことはないですよね。 >> >> では Scm_PairClass の定義はどこに? > > Scm_PairClassの「定義」はlist.cにあります。 > (gauche.hにあるのはScm_PairClassの「宣言」) SCM_DEFINE_BUILTIN_CLASS(Scm_PairClass, NULL, NULL, NULL, NULL, list_cpl); が定義なんですね。 > list.objはlibgauche.dllに含まれて、goshはmain.objとlibgauche.dllを > リンクするなりますから、一番ありそうなのは、goshのリンク時にlibgauche.dll > が含まれていないことですね。上記エラーが出る際のコマンド (gccかg++を > キックしているコマンドライン) はわかりますか? gcc.compile.c bin\gcc\debug\main.o gcc.link bin\gcc\debug\gosh.exe bin\gcc\debug\main.o(.text+0xfc1): In function `main': C:/develop/Gauche-0.8/boost/../src/main.c:302: undefined reference to `Scm_PairClass' g++ -g -o "bin\gcc\debug\gosh.exe" "bin\gcc\debug\main.o" "bin\gcc\debug\gauche.dll" -Wl,-Bdynamic -Wl,-Bstatic "bin\gcc\debug\gauche.dll" -Wl,-Bdynamic -Wl,-Bstatic -Wl,-Bdynamic ...failed gcc.link bin\gcc\debug\gosh.exe... でしょうか。 > mingwでそのあたりの話をどう解決しているのかが気になります。 > > とりあえず、非常に単純なプログラムで、Boost.Build経由のmingwを使った > DLLのビルドと外部データシンボルの参照ができるかどうかを確認するのが > 第一歩ではないでしょうか。例えば次のような2つのファイルを用意しといて: > > file: foo.c > > int foo_data = 1; > > file: main.c > > #include <stdio.h> > extern __declspec(dllimport) int foo_data; > int main(int argc, char **argv) > { > printf("%d\n", foo_data); > } > > > foo.cからlibfoo.dllをビルドし、main.cの方でそれをリンクしてfoo_dataが > 参照できるかどうか、ってことですね。 lib foo : ../src/foo.c : <link>shared ; exe main : ../src/main.c foo : <include>../src ; って書いて src ディレクトリに入れて gosh の方をコメントアウトして、 試してみました。(と書いておかないと後で忘れそう。) 問題なく 1 と表示されました。 pexports で見た結果は以下の通りなので、Scm_PairClass がシンボルと して export されていないところに問題がありそうな感じです。 LIBRARY foo.dll EXPORTS foo_data DATA 参考までに gauche.def を添付しておきます。 -- shelarcy <shela****@capel*****> http://page.freett.com/shelarcy/ -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: gauche.def 型: application/octet-stream サイズ: 8271 バイト 説明: 無しDownload