Qt - Qt調用VS生成的C動態庫及Window下Qt無法加載動靜態庫解決方案


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無法加載動靜態庫解決方案

加載示例代碼

 

  1.  
    # 請配置 Mysql 的包含庫路徑
  2.  
    win32:INCLUDEPATH += "D:/Mysql/mysql-5.7.15-win32/include"
  3.  
    # 請配置 Mysql 的靜態庫路徑
  4.  
    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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM