我正在尝试为用Haskell编写的CLI工具编译一个独立的可执行文件。我遵循了这个示例,使用Cabal v3.2和ghc v8.10.3使用Github Actions自动为不同的操作系统构建可执行文件。
这似乎运行良好,并且可执行文件确实可以正常工作,但是当实际应用于数据时,我收到以下针对Linux版本的错误消息(我没有测试Windows版本,但是一位同事确认MacOS版本也存在同样的问题):
myprogram-0.3.2-Linux-ghc-8.10.3:
/home/runner/.cabal/store/ghc-8.10.3/pandoc-citeproc-0.17.0.2-
0607b6a3d51d41b0211d235af7fcf6eeb452dc6738775583dac1146860db61b1/
share/locales/locales-en-US.xml: openBinaryFile: does not exist (No such file or directory)
这告诉我,我依赖于BidocTeX文件解析的pandoc-citeproc包含一些其他数据文件,这些数据文件没有打包到可执行文件中。实际上,我在cabal-install文档中发现了以下句子:
请注意,复制的可执行文件不是自包含的,因为它们可能使用存储中的数据文件。资源
我确实在pandoc文档中也读过,可以用已经包含这些额外文件的方式来构建它。
可以编译pandoc,以便将pandoc使用的数据文件嵌入到二进制文件中。生成的二进制文件可以从任何目录运行,并且是完全独立的。使用cabal,将-fembed_data_files添加到cabal configure或cabal安装命令。对于堆栈,请使用--flag pandoc:embed_data_files。资源
如何构建可执行文件cabal install
以防止出现上述错误消息?我希望这是可能的,并且我在这里不会错过任何重要的事情。
我试过了
cabal install exe:myprogram --install-method=copy --overwrite-policy=always -fembed_data_files
无济于事。
embed_data_files
在cabal install exe:myprogram
命令中添加标记将不起作用,因为cabal-install会将其传递给您的可执行文件,而不是将其转发给pandoc-citeproc。将其设置为好,最方便的方法是通过该cabal.project
文件。如果您没有,请使用以下最少内容创建它:
packages: ./*.cabal
package pandoc-citeproc
flags: +embed_data_files
下次您要求构建时,cabal-install将使用该标志重新编译pandoc-citeproc依赖项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句