Qt 解决程序动态库必须和可执行文件放同一文件夹

122 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 titlle bar

欢迎来到我的博客,希望这篇文章对你有所帮助,如果觉得不错,请点赞搜藏哈。

Qt 解决程序动态库必须和可执行文件放同一文件夹1 背景2 使用场景描述2.1 添加动态库2.2 更改编译目录2.3 复制库文件到编译目录并运行程序2.4 复制库文件到程序根目录2.5 Release下测试3 实现动态库文件夹分类3.1 需求3.2 实现3.2.1 查看项目运行配置3.3 结果

Qt 解决程序动态库必须和可执行文件放同一文件夹

1 背景

最近项目开发需要调用多个外部的动态库,以前一般也就是调用一两个,无所谓,现在需要调用很多个,就想给多个动态库分分类,已方便以后项目的迭代 ,尝试了才发现,只能在同级目录才能调用。所以,决定研究研究。

2 使用场景描述

2.1 添加动态库

我习惯使用相对路径来调用动态库,如下

INCLUDEPATH += $$PWD/CANCore/X64
DEPENDPATH += $$PWD/CANCore/X64
​
​
​
unix|win32: LIBS += -L$$PWD/GECore/Lib/ -lrfm2gdll_stdc_64
​
INCLUDEPATH += $$PWD/GECore/Inc
DEPENDPATH += $$PWD/GECore/Inc

2.2 更改编译目录

我编译的时候,使用的Qt自带的“Shadow build“,目录也是自己定义的,如下

image-20210330105649419

2.3 复制库文件到编译目录并运行程序

复制库文件到编译目录,运行,可以看到程序运行失败了,如下

image-20210330105853673

2.4 复制库文件到程序根目录

如果把动态库文件复制到程序根目录,那么这里及可以运行了

image-20210330110412345

运行程序,如下图

image-20210330110514726

到这里大致问题应该就描述明白了,还有最后一个需要试一下,那就是Release以后的程序,是不是同样需要把动态库复制到程序更目录

2.5 Release下测试

下图是Release下的原始目录,这里我们还需要把我们的必要的Qt库文件搬过来,使用工具即可

image-20210330111216739

执行如下指令,便可以吧Qt库搬运到我们的目录中,如下

dsdsa

尝试运行一下程序,如下,默认Qt的搬运能力是没法办搬运我们自己库的,需要自己手动搬运一下

image-20210330111627304

把对应的GE库和CAN总线库搬运到程序目录,这是我们理想的目录结构如下图,现在尝试能否运行

image-20210330111734590

运行结果如下,还是不可以,那么在试试吧库搬出来到与程序同级目录

image-20210330111917125

结果证明,Release下还是同样,需要把库文件拷贝到统计目录在可以,那么别人的可以分类的文件夹是怎么做到的呢,我们来搞一下

image-20210330112129088

3 实现动态库文件夹分类

3.1 需求

需求就是希望我们的库文件可以放在一个我们自定义的文件家中,程序调用,不用将所有的库文件都放在程序的同级目录。

3.2 实现

3.2.1 查看项目运行配置

如下图,通过查看项目运行设置,我们已经把库文件目录放到了程序的搜索目录了。但是为什么还是不可以呢。这里是看不错出啥新奇玩意了,还是找百度吧。

image-20210330113506181

3.3 结果

看到这里,一定是看了个寂寞,没有搞定,还是老实根目录开搞吧,在折腾没有时间和美工妹子聊人身了。留坑20221年3月30日