次のような内容の「.h」ファイルがあります。
#ifndef MY_IMPORT
#define MY_IMPORT __declspec(dllimport) /* !!! */
#endif
#ifndef MY_EXPORT
#define MY_EXPORT __declspec(dllexport)
#endif
#ifdef __cplusplus
extern "C"{
#endif
MY_IMPORT VOID* WINAPI XXX_FUNC( VOID * ARG1, ... );
/* ... */
#ifdef __cplusplus
}
#endif
@NサフィックスなしでXXX_FUNCをエクスポートする「lib.dll」ライブラリがあります。
この lib.dll を使用する dll (mydll.dll) をビルドしようとすると、GCC メッセージが表示されます。
undefined reference to `__imp__XXX_FUNC@12'
スタックオーバーフローを含む多くのインターネットを見ましたが、解決策が見つかりません。次のように呼び出されるリンカー:
g++ -shared -Wl,--enable-stdcall-fixup mydll.o -L. lib.dll -o mydll.dll
私が見つけることができるように、GCC は '_ imp _XXX_FUNC@12' を '_ imp _XXX_FUNC' にリンクしようとする必要があり、'--enable-stdcall-fixup' はそのような条件での警告を防ぐ唯一のオプションですが、私の MinGW GCCこれを試さないでください。
GCC v4.7 で MinGW をインストールしました。