天天看点

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库,如果编译失败,请检查文件路径是否正确。

继续阅读