系統:win10
軟體:Qt5.12.4(mingw32-7.3.0 64bit), cmder
GLPK版本:4.65
GLPK是遵循GPL協定的線性規劃軟體庫,目前已經有MATLAB、Python、Julia等多種程式設計語言接口,不過官方GLPK庫是C語言編寫的,這樣友善我們在Qt中移植調用。在Windows下如果使用mingw去編譯GPLK會報錯,網上找到了Windows版本GLPK,位址在:
http://winglpk.sourceforge.net/![]()
Windows Qt調用GLPK
其實下載下傳了這個版本使用QT5.12.4自帶的mingw編譯還是會報錯:
20200922 update
在mingw環境下進行編譯,可以根據錯誤提示修改代碼,修改src/stdc.c檔案,在開頭定義
#define __WOE__
原因:考慮到mingw是在win環境下編譯的,stdc.c檔案有段内容是控制MS Windows環境下編譯接口的:
是以開頭給個定義就可以控制了
不用擔心,我們關系隻是成功調用glpk庫而已,以上資源下載下傳後解壓,得到以下目錄結構:
- 庫檔案路徑在
和w32
,感覺自己系統環境自行選擇w64
- 頭檔案路徑在
src
看一下庫檔案夾的内容:
可以看到有一個動态連結庫
glpk_4_65.dll
,這個便是後面我們在Qt中需要調用的外部庫。
根據winglpk的網址我們找到了參考網址:https://en.wikibooks.org/wiki/GLPK/Compiling_with_the_GLPK_library,裡面簡單介紹了了glpk在不同環境下的使用,以Qt為例,我們建立一個控制台工程,在Pro檔案添加以下内容:
LIBS += -L"D:\numerical_compuattion\glpk-4.65\w64" -lglpk_4_65
INCLUDEPATH += "D:\numerical_compuattion\glpk-4.65\src"
(以上路徑需要根據自己解壓的winglpk路徑自行更改)
main.c檔案内容如下:
#include <QCoreApplication>
#include <QTextStream>
#include "glpk.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextStream out(stdout);
QTextStream in(stdin);
out << "GLPK version: " << glp_version() << "\n";
out << "Press Enter\n";
out.flush();
in.readLine();
return a.exec();
}
如果可以成功編譯運作,說明成功調用了gplk庫,如果編譯失敗,請檢查檔案路徑是否正确。