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
