私は同じ問題を抱えていました-プロプライエタリアプリa.exeの場合、プラグインp.dllを構築したかったのです。
1つの投稿が提案されました:
$ dlltool --export-all-symbols a.exe -z a.defs
dlltool: a.exe: no symbols
しかし、a.exeに含まれるa.libファイルがありました。繰り返しますが、[便利な] EXPORTS はありません:
$ dlltool --export-all-symbols a.lib -z a.defs
$ cat a.defs
; dlltool --export-all-symbols -z a.defs q.lib
EXPORTS
_NULL_IMPORT_DESCRIPTOR @ 1 DATA
_IMPORT_DESCRIPTOR_a @ 2 DATA
[インポート ライブラリ (.lib) から変換されたライブラリ ファイル (.a) を使用して gcc で dll をビルドするも参照してください。
最終的に、MinGW メーリング リストでヒントを見つけて、nmが解決策になりました。
$ echo EXPORTS >a.def
$ nm -p a.lib |egrep 'T _' |sed 's/0* T _//' >>a.def
この .def ファイルがあれば、簡単です。
$ #generate liba.a that has the callbacks for the symbols in *a.exe* (what a.lib has, too)
$ dlltool -v -l liba.a -d a.def
$ #build my plugin, linking to liba.a
$ gcc -shared p.c -L. -la -o p.dll