安装 glpk-hs
Installing glpk-hs
我一直在尝试在我的 Haskell 项目中使用 glpk-hs,但我完全不知道该怎么做。我正在使用 stack
到 运行 我的程序,我的困惑很可能是因为我对它的工作原理缺乏了解。
也就是说,我已经下载了 glpk-hs-0.7 并将解压的文件夹放在我的项目文件夹中。我正在 运行 将我的代码与 stack ghci my_program.hs
结合,对 stack.yaml
文件具有以下依赖性:
"extra-deps:
- gasp-1.2.0.0
- glpk-hs-0.7"
它成功安装了 gasp 但安装 glpk 失败并出现此错误:glpk-hs > * Missing (or bad) C library: glpk
.
我还尝试通过下载可执行文件并将其添加到 PATH 来为 Windows 安装 glpk,当我在 cmd 上 运行 glpsol
时给出此消息:
GLPSOL: GLPK LP/MIP Solver, v4.65
No input problem file specified; try glpsol --help
我错过了什么?我注意到在 glpk-hs-0.7/glpk 文件夹中有一个 glpk.c 文件。我应该编译并执行这个程序吗?
顺便说一句,我现在 运行 正在使用 Windows 10,但我主要在 Linux 机器上工作,所以我希望有一个适用于两个系统的解决方案,如果有一个。
谢谢!
glpk-hs
软件包为 单独安装的 GLPK 库提供了 GHC 接口,但安装 glpk-hs
不会自动安装所需的库。编译包的 "glpk.c"
文件无济于事,因为那只是一些有助于构建接口的存根 C 代码。 (绝大多数为其他库提供 "bridge" 的 GHC 包都是以这种方式设计的,因此 glpk-hs
不是特例。)
在 Linux 下,您需要使用发行版的包管理器以 "usual" 的方式安装 GLPK 包的开发版本(例如,对于基于 Debian 的发行版,您需要运行 apt install libglpk-dev
) 在尝试(重新)安装 glpk-hs
包之前。
在 Windows 下,我想从 GLPK for Windows Project Page 下载带有预编译二进制文件的 zip 文件可能是最简单的。在方便的地方将其解压缩,并按照该网页上的说明,将 32 位或 64 位 DLL(视情况而定)复制到 c:\windows\system32
目录。
为了 stack
针对库进行构建,它需要一些额外的库并包含指定的文件目录。在您的项目特定 stack.yaml
(或全局 config.yaml
)中,您需要添加指向适当解压缩路径的行。例如,类似(假设是 64 位环境):
# in stack.yaml or config.yaml
extra-lib-dirs: ["c:\users\XXXXX\glpk-4.65\w64"]
extra-include-dirs: ["c:\users\XXXXX\glpk-4.65\src"]
此外,我 运行 遇到了另一个问题,因为 Cabal 正在寻找 glpk.lib
而不是 glpk_4_65.lib
,所以我不得不将库复制过来。我不确定是否有更好的方法来做到这一点。
> cd c:\users\XXXXX\glpk-4.65\w64
> cp glpk_4_65.lib glpk.lib
现在,最新的 glpk-hs-0.7
软件包与当前的 GHC containers
版本不兼容,因此您需要在 stack.yaml
文件中使用较早的解析器。 lts-12.26
解析器对我有用:
# in stack.yaml
resolver: lts-12.26
最后,GLPK 仅适用于线程 运行 时间,因此请将标志添加到您的 .cabal
文件中:
-- in your .cabal file
executable glpktest
ghc-options: -threaded -O2
您可以从 https://github.com/jyp/glpk-hs/blob/master/examples/example1.hs 中获取示例。删除 import Algebraic.Classes
行,因为它不需要,并在 .cabal
文件中添加以下 executable
子句:
-- in your .cabal file
executable glpktest
hs-source-dirs: src
main-is: Example1.hs
default-language: Haskell2010
build-depends: base >= 4.7 && < 5
, glpk-hs
, containers
ghc-options: -threaded -O2
和以下stack.yaml
:
-- full stack.yaml contents
resolver: lts-12.26
packages:
- .
extra-deps:
- glpk-hs-0.7
- gasp-1.2.0.0
extra-lib-dirs: ["c:\users\XXXXX\glpk-4.65\w64"]
extra-include-dirs: ["c:\users\XXXXX\glpk-4.65\src"]
你应该能够stack build
和stack exec glpktest
那个例子。如果可执行文件构建正确但 运行ning 它没有产生任何输出,则可能是因为未找到 DLL。确保已将正确的 DLL 集复制到 c:\windows\system32
.
总结假设 64 位环境的所有步骤:
- 从 winglpk 项目下载并解压预编译的二进制文件
- 将 DLL 从
w64
目录复制到 c:\windows\system32
- 在
w64
目录下,复制glpk_4_65.lib
到glpk.lib
。
- 将上面的
stack.yaml
与解析器 lts-12.26
和适当的目录设置一起使用。
- 尝试将上面给出的
executable
子句 stack build
上面链接的 Example1.hs
(先删除不必要的 import
行)复制到你的 .cabal
文件(包括 -threaded
GHC 选项)
- 使用
stack exec glpktest
,您将有望看到打印的解决方案(x1=40、x2=50 和 x3=0)。
我一直在尝试在我的 Haskell 项目中使用 glpk-hs,但我完全不知道该怎么做。我正在使用 stack
到 运行 我的程序,我的困惑很可能是因为我对它的工作原理缺乏了解。
也就是说,我已经下载了 glpk-hs-0.7 并将解压的文件夹放在我的项目文件夹中。我正在 运行 将我的代码与 stack ghci my_program.hs
结合,对 stack.yaml
文件具有以下依赖性:
"extra-deps:
- gasp-1.2.0.0
- glpk-hs-0.7"
它成功安装了 gasp 但安装 glpk 失败并出现此错误:glpk-hs > * Missing (or bad) C library: glpk
.
我还尝试通过下载可执行文件并将其添加到 PATH 来为 Windows 安装 glpk,当我在 cmd 上 运行 glpsol
时给出此消息:
GLPSOL: GLPK LP/MIP Solver, v4.65
No input problem file specified; try glpsol --help
我错过了什么?我注意到在 glpk-hs-0.7/glpk 文件夹中有一个 glpk.c 文件。我应该编译并执行这个程序吗?
顺便说一句,我现在 运行 正在使用 Windows 10,但我主要在 Linux 机器上工作,所以我希望有一个适用于两个系统的解决方案,如果有一个。
谢谢!
glpk-hs
软件包为 单独安装的 GLPK 库提供了 GHC 接口,但安装 glpk-hs
不会自动安装所需的库。编译包的 "glpk.c"
文件无济于事,因为那只是一些有助于构建接口的存根 C 代码。 (绝大多数为其他库提供 "bridge" 的 GHC 包都是以这种方式设计的,因此 glpk-hs
不是特例。)
在 Linux 下,您需要使用发行版的包管理器以 "usual" 的方式安装 GLPK 包的开发版本(例如,对于基于 Debian 的发行版,您需要运行 apt install libglpk-dev
) 在尝试(重新)安装 glpk-hs
包之前。
在 Windows 下,我想从 GLPK for Windows Project Page 下载带有预编译二进制文件的 zip 文件可能是最简单的。在方便的地方将其解压缩,并按照该网页上的说明,将 32 位或 64 位 DLL(视情况而定)复制到 c:\windows\system32
目录。
为了 stack
针对库进行构建,它需要一些额外的库并包含指定的文件目录。在您的项目特定 stack.yaml
(或全局 config.yaml
)中,您需要添加指向适当解压缩路径的行。例如,类似(假设是 64 位环境):
# in stack.yaml or config.yaml
extra-lib-dirs: ["c:\users\XXXXX\glpk-4.65\w64"]
extra-include-dirs: ["c:\users\XXXXX\glpk-4.65\src"]
此外,我 运行 遇到了另一个问题,因为 Cabal 正在寻找 glpk.lib
而不是 glpk_4_65.lib
,所以我不得不将库复制过来。我不确定是否有更好的方法来做到这一点。
> cd c:\users\XXXXX\glpk-4.65\w64
> cp glpk_4_65.lib glpk.lib
现在,最新的 glpk-hs-0.7
软件包与当前的 GHC containers
版本不兼容,因此您需要在 stack.yaml
文件中使用较早的解析器。 lts-12.26
解析器对我有用:
# in stack.yaml
resolver: lts-12.26
最后,GLPK 仅适用于线程 运行 时间,因此请将标志添加到您的 .cabal
文件中:
-- in your .cabal file
executable glpktest
ghc-options: -threaded -O2
您可以从 https://github.com/jyp/glpk-hs/blob/master/examples/example1.hs 中获取示例。删除 import Algebraic.Classes
行,因为它不需要,并在 .cabal
文件中添加以下 executable
子句:
-- in your .cabal file
executable glpktest
hs-source-dirs: src
main-is: Example1.hs
default-language: Haskell2010
build-depends: base >= 4.7 && < 5
, glpk-hs
, containers
ghc-options: -threaded -O2
和以下stack.yaml
:
-- full stack.yaml contents
resolver: lts-12.26
packages:
- .
extra-deps:
- glpk-hs-0.7
- gasp-1.2.0.0
extra-lib-dirs: ["c:\users\XXXXX\glpk-4.65\w64"]
extra-include-dirs: ["c:\users\XXXXX\glpk-4.65\src"]
你应该能够stack build
和stack exec glpktest
那个例子。如果可执行文件构建正确但 运行ning 它没有产生任何输出,则可能是因为未找到 DLL。确保已将正确的 DLL 集复制到 c:\windows\system32
.
总结假设 64 位环境的所有步骤:
- 从 winglpk 项目下载并解压预编译的二进制文件
- 将 DLL 从
w64
目录复制到c:\windows\system32
- 在
w64
目录下,复制glpk_4_65.lib
到glpk.lib
。 - 将上面的
stack.yaml
与解析器lts-12.26
和适当的目录设置一起使用。 - 尝试将上面给出的
executable
子句stack build
上面链接的Example1.hs
(先删除不必要的import
行)复制到你的.cabal
文件(包括-threaded
GHC 选项) - 使用
stack exec glpktest
,您将有望看到打印的解决方案(x1=40、x2=50 和 x3=0)。