一直没搞明白过这两个东西,今天花工夫用了一下.
总结如下:
mingw中创建dll有两种方式,一是使用 gcc -shared ...
二是使用dllwrap ...
dllwrap是一组工具的调用.gcc -shared是直接生成.
dllwrap相对更灵活一些.不过gcc -shared基本上也够用.
dlltool是用于生成def,exp,lib文件的工具.
它可以基于obj文件(基中函数标记为__declspec(dllexport))或def文件生成exp和lib文件.
前者(exp文件,其中包含了.edata段)是用于创建dll,后者(lib文件,包含.idata段)用于使用dll
dlltool中DLLNAME参数其实只用于产生def文件中library语名和lib中的dll名.
它本身并不需要dll的信息.
几个主要的参考文档:
使用gcc -shared创建dll,也是一个实验的好基础:
http://www.adp-gmbh.ch/win/misc/mingw/dll.html
gnu-binutils manual, as/ar/ranlib/dlltool/ld都是它的一部分
gcc -shared相关的几个参数:
--add-stdcall-alias Export symbols with and without @nn
--kill-at