动态dll加载的问题:(静三动二)
0-1: 静态加载,需要三样东西,lib和dll,还有头文件;三步骤:配置好lib,包含头文件,放置好dll位置。(头文件和依赖文件都不止一个必须全部拷贝过来)
0-2: 动态加载,只需要dll文件即可,另外一个函数接口的符号表(查看实际链接到函数接口的字符串),以Qlibrary的形式加载DLL和对应的接口。
踩坑小结:
(1)-小结封装技术:封装了两个类(或多个类)对外导出,再封装获取这两个类的唯一实例的方法,对外导出,这是第二层。这就是一个大的模块了。然后还可以把他们都放在同一个名字空间下。
(2)-动态链接库的加载:
多层封装的时候,除了检查外层接口是否导出,还得检查最里面的使用的类是否导出了。因为你最外层要接受的是类的对象的指针,所以这个类必须导出。
配置lib:
在 Qt 项目的 .pro 文件中添加如下链接语句:
LIBS += -L/path/to/libraw/lib -llibraw
其中,/path/to/libraw/lib 为库文件所在目录的绝对路径,libraw 为库文件的名称,注意不要添加文件扩展名“.lib”或“.a”。可以先在.pri文件中定义一个变量,如COMMON_LIBDIR代表共有路径,然后这样写:LIBS += -L$${COMMON_LIBDIR}/ -llibraw
编译报错检查:首先就是lib是否链接到正确的路径,然后就是检查头文件包含是否齐全,然后就是动态加载的dll以及依赖的dll是否齐全。