zoukankan      html  css  js  c++  java
  • Qt 调用第三方库

    跨编译器的动态库

    今天想用Qt去调用静态库,碰巧这个库又是用Vs生成的,于是乎...

    使用Qt生成一个静态库,并使用Qt程序去调用,程序正常编译运行。但使用VS生成静态库,再使用Qt程序去调用,程序不能编译,错误File format not recognized (无法识别文件格式)。然而使用Vs生成动态库,再使用Qt去调用,程序就能够正确编译和运行。其中Qt默认使用MinGw编译器。

    那么是怎么回事呢?

    静态库是编译未链接的产物,当编译可执行程序时会去链接静态库中的函数,由于使用了不同的编译器编译,因此会导致文件格式无法识别。

    而动态库是已被编译和链接的资源,相比exe它只是没有入口main,即已经是一个能被机器解读的文件内容。在exe编译过程中只是去查找了外部声明,并没要把动态库的内容再次编译进去,因此能够编译通过。在exe运行时会把库内容拷贝到程序中,尽管动态库和可执行文件是两个不同的编译器,但是它们最终都是被翻译成了机器语言,因此程序可以调用库中函数运行。

    使用动态库

    在.pro文件中添加以下语句,指定动态库的导入库, 并在程序运行时把动态库拷贝到程序所在路径。

    LIBS     += $$PWD/lib/myfun.lib
    

    使用静态库

    在.pro文件中直接指定静态库

    LIBS     += $$PWD/lib/libmyfun.a
    
  • 相关阅读:
    Linux命令格式及7个常见终端命令
    Linux主要目录速查表
    Linux和Windows系统目录结构区别
    C语言下进制的使用
    C语言变量和常量
    C语言的关键字和数据类型
    Linux下交换文件说明
    gcc编译过程
    C语言图形界面QT和MFC(待学)
    字符编码问题
  • 原文地址:https://www.cnblogs.com/llil/p/13492606.html
Copyright © 2011-2022 走看看