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