dll.a和lib 引用MinGW生成的dll.a后出现的问题

在安装nlopt优化库的时候遇到了一个问题,就是安装包中没有.lib文件,只有.dll.a文件,所以就各种搜,终于找到了一个解决办法,如下所示:

下面的文章转载自https://www.cnblogs.com/sanghg/p/4433885.html

以前很少调用MinGW的运行库,现在用到一个项目,用到了glib和gettext等。
遇到了一个问题,折腾了一个下午。
gettext的运行时库之一是intl,MinGW只提供了.dll.a,于是参考了网上其它的介绍,像其它.lib一样调用

pragma comment(lib, "libintl.dll.a")

结果就出现了
无法定位程序输入点 GdiplusStartup于动态链接库libintl-8.dll上。
我坚信libintl没有用到GDI+,Depends查看dll后证明了我的观点,但是Depends查看引用它的exe,却发现exe认为GdiplusStartup在libintl.dll上。

只能证明一个问题,.dll.a和.lib不一样。

那么需要找到相应的.lib,网上有自己编glib的办法,看了看,环境搭建也比较复杂。后来想到一个问题,lib不过是dll导出库的一个说明,那么一定有办法通过dll生成lib。网上搜了后的确如此,意识到自己真的很土。
按网上说的下载pexports生成.def,然后lib命令生成dll后再导入,一切正常。

总结一下遇到的问题

  1. .dll.a,.a和.lib不一样,像libx264.a等vs可以直接导入,我遇到的这个就不可以直接导入(实际上,我的DEBUG可以正常生成和运行,RELEASE生成是没问题的,只是运行时出现上述问题,说明链接生成时是错误的,)。
  2. gettext有很多版本,网上下载一个msvc的版本可以直接用,但是要在安装机器上部署多个不同版本的.dll,会使安装包没必要的增大。
  3. dll是可以生成.lib的,以后.a还是别用了,如果官方没提供,就自己生成一个吧(.h文件没办法生成)。

 

 

本文由dll生成lib的时候使用的是pexports,https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/pexports-0.47/中可以下载,需要注意的是一定要下载pexports-0.47-mingw32-bin文件,这里面有.exe文件,将这个文件复制到VS的安装目录下就可以使用该命令了。

然后按照https://blog.csdn.net/wangzhen209/article/details/50764208中的方法二进行操作就可以,注意,如果直接使用这个网址中的方法一,生成的def文件需要修改,很麻烦。https://blog.csdn.net/u011408697/article/details/44014679也详细阐述了如何根据dll生成lib文件。

你可能感兴趣的:(计算机图形学learning)