“* 缺少(或损坏)C 库:OpenAL32” - 来自 haskell 项目的堆栈构建

问题描述 投票:0回答:1

我有一个使用 Sound.ALUT 的堆栈项目。在添加声音之前,该项目在 Windows 和 Mac 上都运行良好。 (Sound.ALUT 是一个位于 OpenAL 之上的库。)Got 认为可以在 MacOS 上工作,但这些更改破坏了 Windows 构建。在 MacOS 上仍然可以正常构建。

Windows 上“堆栈构建”控制台日志中的违规片段如下所示

GLUT           > [22 of 24] Compiling Graphics.UI.GLUT.Callbacks.Global
GLUT           > [23 of 24] Compiling Graphics.UI.GLUT.Callbacks
GLUT           > [24 of 24] Compiling Graphics.UI.GLUT
GLUT           > copy/register
GLUT           > Installing library in C:\sr\snapshots\87ecdd59\lib\x86_64-windows-ghc-8.10.7\GLUT-2.7.0.16-2jeyeunHWey2D1Huuhst8j
GLUT           > Registering library for GLUT-2.7.0.16..
OpenAL         > configure
OpenAL         > Configuring OpenAL-1.7.0.5...
OpenAL         > Cabal-simple_Z6RU0evB_3.2.1.0_ghc-8.10.7.exe: Missing dependency on a foreign
OpenAL         > library:
OpenAL         > * Missing (or bad) C library: OpenAL32
OpenAL         > This problem can usually be solved by installing the system package that
OpenAL         > provides this library (you may need the "-dev" version). If the library is
OpenAL         > already installed but in a non-standard location then you can use the flags
OpenAL         > --extra-include-dirs= and --extra-lib-dirs= to specify where it is.If the
OpenAL         > library file does exist, it may contain errors that are caught by the C
OpenAL         > compiler at the preprocessing stage. In this case you can re-run configure
OpenAL         > with the verbosity flag -v3 to see the error messages.
OpenAL         >
Progress 10/21

显然找不到 OpenAL。我试过:

在 Mac 版本上让 Sound.ALUT 运行时我遇到了类似的问题。在这种情况下,从源头上构建似乎可以解决问题。由于对构建环境不太熟悉,我在 Windows 上构建时遇到更多麻烦。我的 Windows 工作主要集中在安装 Cygwin 并使其看起来像 Unix。但这一次,我试图利用 stack 的 mingw-w64 提供的功能。我正在用 stack exec 拉下东西—— pacman 试图找到一些可以安装 OpenAL 作为副作用的东西,但没有运气。

一些微妙之处源于堆栈想要在其自己的独立环境中安装东西的事实。它尝试将安装保持在项目目录内本地化,而不是与其他地方的目录混在一起。我的堆栈环境如下所示

C:\Users\Mark\slgjff>stack path snapshot-doc-root: C:\sr\snapshots\aff7b821\doc local-doc-root: C:\Users\Mark\slgjff\.stack-work\install\f5431f41\doc local-hoogle-root: C:\Users\Mark\slgjff\.stack-work\hoogle\f5431f41 stack-root: C:\sr project-root: C:\Users\Mark\slgjff config-location: C:\Users\Mark\slgjff\stack.yaml bin-path: .;C:\sr\snapshots\87ecdd59\bin;C:\sr\compiler-tools\x86_64-windows\ghc-8.10.7\bin;C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\ghc-8.10.7\bin;C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\ghc-8.10.7\mingw\bin;C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\msys2-20220503\mingw64\bin;C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\msys2-20220503\usr\bin;C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\msys2-20220503\usr\local\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Users\Mark\AppData\Roaming\local\bin;C:\Users\Mark\AppData\Local\Microsoft\WindowsApps programs: C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows compiler-exe: C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\ghc-8.10.7\bin\ghc-8.10.7.exe compiler-bin: C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\ghc-8.10.7\bin compiler-tools-bin: C:\sr\compiler-tools\x86_64-windows\ghc-8.10.7\bin local-bin: C:\Users\Mark\AppData\Roaming\local\bin extra-include-dirs: C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\msys2-20220503\mingw64\include extra-library-dirs: C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\msys2-20220503\mingw64\lib, C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\msys2-20220503\mingw64\bin snapshot-pkg-db: C:\sr\snapshots\87ecdd59\pkgdb local-pkg-db: C:\Users\Mark\slgjff\.stack-work\install\363b2fd8\pkgdb global-pkg-db: C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\ghc-8.10.7\lib\package.conf.d ghc-package-path: C:\Users\Mark\slgjff\.stack-work\install\363b2fd8\pkgdb;C:\sr\snapshots\87ecdd59\pkgdb;C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows\ghc-8.10.7\lib\package.conf.d snapshot-install-root: C:\sr\snapshots\87ecdd59 local-install-root: C:\Users\Mark\slgjff\.stack-work\install\363b2fd8 dist-dir: .stack-work\dist\274b403a local-hpc-root: C:\Users\Mark\slgjff\.stack-work\install\363b2fd8\hpc local-bin-path: C:\Users\Mark\AppData\Roaming\local\bin ghc-paths: C:\Users\Mark\AppData\Local\Programs\stack\x86_64-windows
我不确定配置是否需要令人满意。我希望我可以构建一个贯穿始终的清单,但我的理解还不足以编写该清单。是否需要头文件的 C 源代码?不知道。当然,它必须在某个路径上需要 .lib 和 .dll。但到底是哪条路呢?

我的 package.yaml ——在 MacOS 上运行良好

ghc-options: #- -dynamic - -static dependencies: - base >= 4.7 && < 5 - random - gloss - gloss-juicy - ALUT library: source-dirs: src executables: slgjff-exe: main: Main.hs source-dirs: app ghc-options: - -threaded - -rtsopts - -with-rtsopts=-N dependencies: - slgjff tests: slgjff-test: main: Spec.hs source-dirs: test ghc-options: - -threaded - -rtsopts - -with-rtsopts=-N dependencies: - slgjff
还有我的 stack.yaml ——它在 MacOS 上也能正常工作

resolver: url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/24.yaml packages: - . extra-deps: - gloss-1.13.2.1@sha256:273d02d30e1896932d45424dab6022a16986c0ed3eef6937776b5f40854ce51c,4075 - JuicyPixels-3.3.6@sha256:03bd32c3a884ac8a32f49334f14695469a710945c84cef9a1e059a79ac416996,3911 - gloss-juicy-0.2.3
因为它可能会有所帮助,所以以下是我的程序顶部的内容。

import System.Exit ( exitSuccess, exitFailure ) import System.IO ( hPutStrLn, stderr ) import Data.List import Graphics.Gloss import Graphics.Gloss.Interface.Pure.Game import Graphics.Gloss.Interface.IO.Game import Graphics.Gloss.Data.Vector import Graphics.Gloss.Juicy import Control.Monad( when, unless ) import Sound.ALUT as S
我非常绝望,当构建尝试从 C:/Windows/System32 删除文件时,我把 C:/Windows/System32 卡在了路径上,差点把我的饮料洒了。所以,我把它拿出来了。没有想法了。

我的感觉是,由于对 Windows 上的 ghc 缺乏经验,我一定错过了一些对于有更多经验的人来说非常明显的东西。预先感谢您的任何见解。

附注我创建了该项目的精简版本,并将其放在 github 上:

https://github.com/markcornwell/alut-glitch

请参阅项目的自述文件,了解如何重现错误的说明。

haskell haskell-stack msys2 openal openal-soft
1个回答
0
投票
安装 OpenAL-1.7.0.5 (Windows):

在 Windows 上从

https://openal.org/downloads/ 安装“OpenAL 1.1 Windows Installer (zip)”。

https://www.openal-soft.org/#download 中提取“openal-soft-1.23.1-bin.zip”的内容。

将“libOpenAL32.dll.a”库复制到“mingw”目录

用过ghcup D:\ghcup\ghc\9.4.7\mingw\lib

要发现安装过程中的问题,请在 cabal install 中使用 -v3 标志: cabal install --flag=BuildExamples -v3 > error_file.txt

“错误文件.txt” {- ... 运行:“D:\ghcup\ghc\9.4.7\lib../mingw/bin\gcc.exe”... 与环境:... D:\ghcup\ghc\9.4.7\lib../mingw/bin\gcc.exe 返回 ExitFailure 1 D:\ghcup\ghc\9.4.7\lib../mingw/bin\gcc.exe 返回 ExitFailure 1 并出现错误

message: note ======> D://ghcup//ghc//9.4.7//mingw//bin/ld.exe: cannot find -lOpenAL32
...

© www.soinside.com 2019 - 2024. All rights reserved.