Qt 从安装到打包动态链接库
文章内容很简单,但确实困惑了我一段时间。主要是两个部分的内容:
- 安装 Qt
- 将编译好的程序和它需要的动态链接库一起打包
一、安装 Qt
安装 Qt 的教程网上很多,跟着操作一般没有问题,没有人告诉我为什么这么操作。在选择安装组件的时候,我想用 MinGW,可为什么有两个 MinGW。
现在我知道上面那个是用于 MinGW 的 Qt 库,下面那个是 C++ 的编译器。以前这个我懵逼了好长一段时间,网上教程讲如果用 VS 的话,就把所有的 MSVC 选上,可我全选上了打开Qt Creator 发现不能用啊!(我没有安装 Visual Studio)。说这么多意思很简单: Qt 库要和对应的编译器一起使用 。
二、将应用程序和需要的动态链接库打包
我是 Windows x86_64 平台, Qt 库用的是 MinGW 32 位的。在网上看到别人要么双击打开编译好的程序就能用(只能在自己电脑上这样)或者复制对应的动态链接库放到一起,在哪都能用。可我不仅直接双击不能用,复制了对应的动态链接库以后依然不能用,给我提示这个:
搜了下这个错误代码,是应用程序用了与自身位数不同的动态链接库。难道我复制的库和在 Qt Creator 中运行时用的 Qt 库不一样?于是我把库名在 Qt 库里搜索了一下,发现同名的库只有一个。那为什么不能运行呢?
继续在网上找答案,原来在 Qt Creator 中运行时它会把链接库的路径添加 PATH 这个环境变量中,还放到最前面。这样运行的程序就继承了 Qt Creator 的环境变量,就可以优先使用 Qt Creator 为它指定的路径下的链接库(虽然我知道环境变量是应用程序的环境,但我一直把思维局限在命令行上的应用程序,因为这个才是可以直观感受到的)。那么现在问题就很清晰了,我双击运行时在默认 PATH 指定的路径下有和这个应用程序需要的同名的链接库,但位数不一样。于是我打开一个新的 CMD 窗口,清空 PATH 这个变量,再在这个窗口运行,果然又提示缺少 libwinpthread-1.dll 和 libstdc++-6.dll 。看到这两个名字我才想起来我装了 64 位的 MinGW-W64 。再复制这两个链接库,直接双击运行,成功了。