Haskell - 从源添加包到 Yesod 项目
Haskell - adding a package from source to a Yesod project
我找到了一个很好的音频库来处理服务器端的音频,但我在实际将其作为 yesod 的一部分时遇到了麻烦(可能是因为我还不太了解 cabal/stack)。
我正在尝试包含此模块 Sound.File.Sndfile
并且我已从此处 http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.27.tar.gz 下载其源文件。完成它的步骤是什么?
编辑
我试着完成这一步
runhaskell Setup.hs configure --ghc
runhaskell Setup.hs build
runhaskell Setup.hs install
但它没有 Setup.hs
文件。
编辑 2
我已经按照 Alexis King 的建议添加了依赖项 hsndfile
,但是在构建时出现以下错误:
[ 1 of 59] Compiling Enums ( Enums.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.7.0/build/Enums.o )
<command line>: can't load .so/.DLL for: libsndfile.so (libsndfile.so: cannot open shared object file: No such file or directory)
-- While building package Fastwork-0.0.0 using:
/home/geppetto/.stack/setup-exe-cache/x86_64-linux/setup-Simple-Cabal-1.22.7.0-ghc-7.10.3 --builddir=.stack-work/dist/x86_64-linux/Cabal-1.22.7.0 build lib:Fastwork exe:Fastwork --ghc-options " -ddump-hi -ddump-to-file"
Process exited with code: ExitFailure 1
我下载了libsndfile-1.0.25.tar.gz
并解压了,然后运行,./configure,make,make install。当我尝试在我的 Yesod 项目中再次执行 stack build
时,错误是相同的。我错过了什么?
有什么理由不能使用any of these libraries that are already on Hackage?如果您使用实际包目录中的包而不是仅使用 tarball,它可能会更容易、更安全、更可预测。
如果您真的想要使用您找到的那个库,并且您正在使用堆栈,您可以将它添加到 [=13] 的 packages
部分=] 文件:
packages:
- '.'
- location: http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.27.tar.gz
extra-dep: true
然后您可以将 libsndfile
的依赖项添加到您的 .cabal
文件中。但是,我会小心依赖来自任意 URL 的包,所以我可能至少会下载该包并解压它。然后你可以只指向本地路径而不是远程 URL:
packages:
- '.'
- location: ./some/path/to/libsndfile
extra-dep: true
有关详细信息,请参阅 documentation for the stack.yaml
file。
我找到了一个很好的音频库来处理服务器端的音频,但我在实际将其作为 yesod 的一部分时遇到了麻烦(可能是因为我还不太了解 cabal/stack)。
我正在尝试包含此模块 Sound.File.Sndfile
并且我已从此处 http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.27.tar.gz 下载其源文件。完成它的步骤是什么?
编辑
我试着完成这一步
runhaskell Setup.hs configure --ghc
runhaskell Setup.hs build
runhaskell Setup.hs install
但它没有 Setup.hs
文件。
编辑 2
我已经按照 Alexis King 的建议添加了依赖项 hsndfile
,但是在构建时出现以下错误:
[ 1 of 59] Compiling Enums ( Enums.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.7.0/build/Enums.o )
<command line>: can't load .so/.DLL for: libsndfile.so (libsndfile.so: cannot open shared object file: No such file or directory)
-- While building package Fastwork-0.0.0 using:
/home/geppetto/.stack/setup-exe-cache/x86_64-linux/setup-Simple-Cabal-1.22.7.0-ghc-7.10.3 --builddir=.stack-work/dist/x86_64-linux/Cabal-1.22.7.0 build lib:Fastwork exe:Fastwork --ghc-options " -ddump-hi -ddump-to-file"
Process exited with code: ExitFailure 1
我下载了libsndfile-1.0.25.tar.gz
并解压了,然后运行,./configure,make,make install。当我尝试在我的 Yesod 项目中再次执行 stack build
时,错误是相同的。我错过了什么?
有什么理由不能使用any of these libraries that are already on Hackage?如果您使用实际包目录中的包而不是仅使用 tarball,它可能会更容易、更安全、更可预测。
如果您真的想要使用您找到的那个库,并且您正在使用堆栈,您可以将它添加到 [=13] 的 packages
部分=] 文件:
packages:
- '.'
- location: http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.27.tar.gz
extra-dep: true
然后您可以将 libsndfile
的依赖项添加到您的 .cabal
文件中。但是,我会小心依赖来自任意 URL 的包,所以我可能至少会下载该包并解压它。然后你可以只指向本地路径而不是远程 URL:
packages:
- '.'
- location: ./some/path/to/libsndfile
extra-dep: true
有关详细信息,请参阅 documentation for the stack.yaml
file。