HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1111
ひらまるMinGWによるHSP拡張DLL作成について4解決


ひらまる

リンク

2010/11/11(Thu) 15:54:13|NO.35741

下記のファイルにおいて、
http://www1.axfc.net/uploader/Sc/so/172324.zip

"c.bat"をダブルクリックすると、
"c.c"が"minGW"コによってンパイルされ、
"c.dll"ファイルが生成されます。
"c.hdp"は、"c.dll"の"test"関数を実行し、正常に動作します。

しかし、"cpp.bat"をダブルクリックしても、
"c.cpp"はコンパイルされているようなのですが、
"cpp.dll"は生成されません。
私の環境では、
temp.exp:fake:(.edata+0x30): undefined reference to `test'
collect2: ld returned 1 exit status
というエラーが出ます。
"test"が未定義の参照(undefined reference)?
defファイルに問題があるのでしょうか。
2日間調べ続けたのですが、それっぽい情報はいくつかあっても、
解決に至る情報はありませんでした。
(特にこちらなどかなり近いと思ったのですが…
http://takumakei.blogspot.com/2010/03/mingwdll-32bit64bit.html)
"minGW"を使っている皆様、ご助言いただけないでしょうか。



この記事に返信する


晩御飯

リンク

2010/11/11(Thu) 17:02:16|NO.35743

MinGWとか知らないけどexternとか足りない気がした。
そもそもここで聞く質問じゃない。



hogepiyo

リンク

2010/11/11(Thu) 19:01:11|NO.35745

> defファイルに問題があるのでしょうか
その通りです。
コンパイル時に関数の名前がtestから_Z4testvというように変わっていますので。
「名前修飾」などを調べてください。



ORZ

リンク

2010/11/11(Thu) 20:51:26|NO.35746

まーこのくらいならHSPに関連してるしいいんじゃなかろうか。
回答はhogepiyo氏の通り。



ひらまる

リンク

2010/11/13(Sat) 00:35:39|NO.35763

遅くなってすみません。
場違いは重々承知ですが、
HSPの「DLLの呼び出しに失敗しました。」というエラーから始まった疑問なので、
ここで質問させていただきました。

defファイルなしでコンパイルした場合、無事にdllファイルを生成できました。
しかし、hogepiyoさんがおっしゃったように、関数名が自動でつけられていました。
(C++は同じ名前の関数が作れちゃうから重複を回避するためであると聞きました)
そこで、エクスポートする関数にのみ、「extern "C"」をつけ、
C言語の関数という扱いにすると、外部からの呼び出しに成功しました。

MinGWでC++のDLLを作ると、いくつか必要なdllがあるようで、環境依存という問題が残りますが、
これについてはまだ詳しくしらべていないので、今回は解決という形にさせていただきます。
ご助言くださった皆様、本当にありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.