1,生成dll和lib库
在vs2010中新建工程,在向导中选择DLL,如下图所示:
新建两个文件mydll.h和mydll.c
mydll.h代码如下:
1 #ifndef MYDLL_H 2 #define MYDLL_H 3 #ifdef __cplusplus // 4 extern "C"{ 5 #endif 6 __declspec(dllexport) int myFun(int a,int b); 7 8 #ifdef __cplusplus 9 } 10 #endif 11 12 #endif
mydll.c代码如下:
1 #include "mydll.h" 2 #include <stdio.h> 3 4 int myFun(int a,int b) 5 { 6 printf("myFun is called"); 7 8 return a+b; 9 }
编译运行,在Debug目录下可看到下述文件:
2.在Qt中调用dll和lib库
新建Qt工程LibTest2,将mydll.h文件添加到当前工程中;将mydll.lib和mydll.dll文件复制到工程所在目录;
在LibTest2.pro右键导入外部库,参数选项如下图所示:
在mainwindow.cpp中包含“mydll.h”
在构造函数中添加下述代码:
int test; test = myFun(33,33); qDebug()<<test;
编译运行,结果如下:
可以看到C动态库已被调用。
Window下Qt无法加载动静态库解决方案
加载示例代码
-
# 请配置 Mysql 的包含库路径
-
win32:INCLUDEPATH += "D:/Mysql/mysql-5.7.15-win32/include"
-
# 请配置 Mysql 的静态库路径
-
win32:LIBS += "-LD:/Mysql/mysql-5.7.15-win32/lib" -llibmysql
静态库标示符注意事项
-L :后面要跟的是lib文件的路径名,不可以有空格。
-l :后面跟的是要加载的静态库lib文件名,是文件名,不要加后缀名,要链接着写,别加空格。
Qt帮助文档
双击选中关键字 "LIBS" || “INCLUDEPATH” 按下键盘的F1键 调用 Qt自带的帮助文档。
加载不到静态库情形
1、空格路径
LIBS += "-LE:\Work For Chenluyong\znjd_20161213\Code\External\bin" -lSystemModule_znjd
路径中存在空格时,务必用双引号包裹起来。
2、L与l
-L : 跟的是路径 (绝对路径 / 相对路径)
-l:跟的是静态库名字.
3、LIBS关键字的位置的摆放
4、静态库的后缀名
-llibmysql.lib 应该改写为 -llibmysql
5、究极错误 之 我的64位Mysql
这是我所遇到的问题,困扰了我很久才发现,原来我的程序是32位的,而我的Mysql库是64位的!!!
6、C风格接口
如果库已经找到,但是发现提示一些被调用函数未声明或者未实现的错误
请检查函数接口是否已用 extern "C" 修饰
转自:https://blog.csdn.net/csnd_ayo/article/details/52550466