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
    
  • 相关阅读:
    邻项交换排序
    [POJ 2559]Largest Rectangle in a Histogram 单调栈
    最大子序和 单调队列
    单调栈 总结
    计算中缀表达式
    [HYSBZ 2457] 双端队列
    数组的宽度 单调栈
    SVM从入门到精通
    CVPR2018_RotationNet: Joint Object Categorization and Pose Estimation Using Multiviews from Unsupervised Viewpoints
    比特币以及区块链入门
  • 原文地址:https://www.cnblogs.com/llil/p/13492606.html
Copyright © 2011-2022 走看看