天天看點

Windows Qt調用GLPK

系統: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編譯還是會報錯:

Windows Qt調用GLPK

20200922 update

在mingw環境下進行編譯,可以根據錯誤提示修改代碼,修改src/stdc.c檔案,在開頭定義

#define __WOE__

原因:考慮到mingw是在win環境下編譯的,stdc.c檔案有段内容是控制MS Windows環境下編譯接口的:

Windows Qt調用GLPK

是以開頭給個定義就可以控制了

不用擔心,我們關系隻是成功調用glpk庫而已,以上資源下載下傳後解壓,得到以下目錄結構:

Windows Qt調用GLPK
  1. 庫檔案路徑在

    w32

    w64

    ,感覺自己系統環境自行選擇
  2. 頭檔案路徑在

    src

看一下庫檔案夾的内容:

Windows Qt調用GLPK

可以看到有一個動态連結庫

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庫,如果編譯失敗,請檢查檔案路徑是否正确。

繼續閱讀