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
    
  • 相关阅读:
    线性代数思维导图——3.向量
    微分中值定理的基础题型总结
    构造函数
    Python课程笔记(七)
    0241. Different Ways to Add Parentheses (M)
    0014. Longest Common Prefix (E)
    0013. Roman to Integer (E)
    0011. Container With Most Water (M)
    0010. Regular Expression Matching (H)
    0012. Integer to Roman (M)
  • 原文地址:https://www.cnblogs.com/llil/p/13492606.html
Copyright © 2011-2022 走看看