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“,目录也是自己定义的,如下
2.3 复制库文件到编译目录并运行程序
复制库文件到编译目录,运行,可以看到程序运行失败了,如下
2.4 复制库文件到程序根目录
如果把动态库文件复制到程序根目录,那么这里及可以运行了
运行程序,如下图
到这里大致问题应该就描述明白了,还有最后一个需要试一下,那就是Release以后的程序,是不是同样需要把动态库复制到程序更目录
2.5 Release下测试
下图是Release下的原始目录,这里我们还需要把我们的必要的Qt库文件搬过来,使用工具即可
执行如下指令,便可以吧Qt库搬运到我们的目录中,如下
尝试运行一下程序,如下,默认Qt的搬运能力是没法办搬运我们自己库的,需要自己手动搬运一下
把对应的GE库和CAN总线库搬运到程序目录,这是我们理想的目录结构如下图,现在尝试能否运行
运行结果如下,还是不可以,那么在试试吧库搬出来到与程序同级目录
结果证明,Release下还是同样,需要把库文件拷贝到统计目录在可以,那么别人的可以分类的文件夹是怎么做到的呢,我们来搞一下
3 实现动态库文件夹分类
3.1 需求
需求就是希望我们的库文件可以放在一个我们自定义的文件家中,程序调用,不用将所有的库文件都放在程序的同级目录。
3.2 实现
3.2.1 查看项目运行配置
如下图,通过查看项目运行设置,我们已经把库文件目录放到了程序的搜索目录了。但是为什么还是不可以呢。这里是看不错出啥新奇玩意了,还是找百度吧。