[Gauche-devel-jp] Re: main.c で Scm_PairClass が見つからない

Back to archive index

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 


Gauche-devel-jp メーリングリストの案内
Back to archive index