OpenCV学习 day9 链接与部署

第十一章

11.1 后台构建过程

        当按下"Run"或者"build"按钮之后会经历三个过程:预处理、编译、链接。

11.1.1 预处理

        该阶段是将源代码送入实际的编译器之前,将源代码转变为最终状态的过程。例如将宏定义之类的代码转变为标准C++代码。

11.1.2 编译

        编译器获取预处理程序的输出,并将其编译成机器代码。在构建过程中可以保存并重用该机器代码,因为只要不改变源文件,那么生成的机器代码就不会改变。

11.1.3 链接

        目标是链接编译器产生的对象以产生可执行的文件或库。

        链接有两种:静态链接和动态链接

        动态链接是将编译器生成的对象链接起来的过程,方法是在生成的可执行文件或库中放入函数名,以便特定函数的实际代码驻留在共享库(例如*dll文件)中,而且库的实际链接和加载在运行时完成。动态链接的优缺点:

        应用程序在运行时将需要访问共享库,因此必须将这些共享库与应用程序的可执行文件一起部署,并确保应用程序能够访问共享库。

        动态链接允许在独立的共享文件中保留应用程序的独立部分,从而获得极大的灵活性,因此可以只更新共享库,而不用重新编译应用程序的所有部分。

        静态链接可用于将所有需要的的代码链接到生成的可执行文件中,从而创建一个静态库或者可执行文件。静态链接的优缺点与动态链接相反:

        无须部署用于构建应用程序的动态库,因为所有的代码实际上都被复制到生成的可执行文件中了。

        应用程序的可执行文件大小会增加,这就意味着更长的初始加载时间以及更大的部署文件。

        一旦库和应用程序任意部分发生任何改变,都需要对其所有组成部分执行完整的重建过程。

11.2 构建 OpenCV 静态库

11.3 构建 Qt 静态库

11.4 部署 Qt + OpenCv应用程序

11.4.1 使用静态链接部署

        静态链接部署的缺点:

        构建过程需要更多的时间,而且执行文件会变得越来越大;

        不能将静态和共享(动态) Qt 库混合,这就意味着不能借用插件功能,无法通过从头开始构建所有内容来扩展应用程序。

11.4.2 使用动态链接部署

        使用共享库(或动态链接)部署用QtOpenCV构建应用程序时,需要保证应用程序的可执行文件能够访问QtOpenCV的运行时库,以便对其进行加载和使用。

        Qt框架提供了命令行工具来简化Qt应用程序的部署。首先是确保在"Release"模式下构建应用程序,然后在文件中找到可执行文件(一般假设叫做"app.exe"),将其复制到单独的一个文件夹中(假设为deploy_path),然后使用命令行工具输入以下代码:

cd deploy_path   //进入所在文件夹

QT_PATHbinwindeployqt app.exe     //加入文件,好像可以直接拖进去

        windeployqt工具是一个部署工具助手,它简化了将所需的 Qt 运行时库复制到应用程序可执行文件夹的过程。我们仍然需要处理OpenCV运行时库,将构建OpenCV动态库时的文件夹中的"opencv330.dll"和"opencv_ffmpeg330.dll"文件复制到应用程序可执行文件夹中。

11.4.3 Qt安装程序框架

        Qt安装程序框架运行为Windows、macOS以及Linux操作系统创建一个跨平台的 Qt 应用程序的安装程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值