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


    以前很少调用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文件没办法生成)。
  • 相关阅读:
    VSCode一键调用DOSBox运行MASM/TASM代码的自定义任务
    C# | VS2019连接MySQL的三种方法以及使用MySQL数据库教程
    Visual Studio 2019连接MySQL数据库详细教程
    Visual Studio 2022 激活码
    Python | 使用SVM支持向量机进行鸢尾花分类
    Python | __init__.py的神奇用法
    Java简单介绍及Java生态
    NoSQL:一个帝国的崛起
    学习哪门语言好
    浅析HTTP协议
  • 原文地址:https://www.cnblogs.com/sanghg/p/4433885.html
Copyright © 2020-2023  润新知