gpt4 book ai didi

haskell - 安装 glpk-hs

转载 作者:行者123 更新时间:2023-12-02 11:19:13 28 4
gpt4 key购买 nike

我一直在尝试在我的 Haskell 项目中使用glpk-hs,但我完全不知道如何去做。我正在使用 stack 来运行我的程序,我的困惑很可能来自于我对其工作原理缺乏了解。

话虽这么说,我已经下载了glpk-hs-0.7并将提取的文件夹放入我的项目文件夹中。我使用 stack ghci my_program.hs 运行代码,并在 stack.yaml 文件上具有以下依赖项:

“额外的部门:
-喘息-1.2.0.0
- glpk-hs-0.7"

成功安装gasp,但glpk安装失败,并出现以下错误:glpk-hs > * 缺少(或错误)C 库:glpk.
我还尝试通过下载可执行文件并将其添加到 PATH 来为 Windows 安装 glpk,当我在 cmd 上运行 glpsol 时,它会显示以下消息:

GLPSOL:GLPK LP/MIP 求解器,v4.65
未指定输入问题文件;尝试 glpsol --help

我错过了什么?我注意到在 glpk-hs-0.7/glpk 文件夹中有一个 glpk.c 文件。我应该编译并执行这个程序吗?

顺便说一句,我现在在 Windows 10 上运行,但我主要在 Linux 计算机上工作,所以我希望有一种适用于这两个系统的解决方案(如果有的话)。

谢谢!

最佳答案

glpk-hs软件包为单独安装 GLPK 库提供了 GHC 接口(interface),但安装 glpk-hs不会自动安装所需的库。编译包的"glpk.c"文件没有帮助,因为这只是一些帮助构建界面的 stub C 代码。 (绝大多数为其他库提供“桥梁”的 GHC 包都是这样设计的,因此 glpk-hs 不是一个特殊情况。)

在 Linux 下,您需要使用发行版的软件包管理器以“通常”的方式安装 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行,因为不需要它,并且具有以下 executable您的 .cabal 中的条款文件:

-- 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 buildstack exec glpktest那个例子。如果可执行文件正确构建但运行它没有产生输出,则可能是因为未找到 DLL。确保正确的 DLL 集已复制到 c:\windows\system32 .

总结假设 64 位环境的所有步骤:

  1. 从 winglpk 项目下载并解压预编译的二进制文件
  2. w64 复制 DLL目录到c:\windows\system32
  3. w64目录,复制glpk_4_65.libglpk.lib .
  4. 使用stack.yaml上面带有解析器 lts-12.26以及适当的目录设置。
  5. 尝试stack build Example1.hs上面链接(首先删除不必要的 import 行)与 executable上面给出的条款复制到您的.cabal中文件(包括 -threaded GHC 选项)
  6. 使用stack exec glpktest ,您有望看到打印的解决方案(x1=40、x2=50 和 x3=0)。

关于haskell - 安装 glpk-hs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59911444/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com