我正在尝试为用 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)
这告诉我,我依赖于 BibTeX 文件解析的 pandoc-citeproc 有一些额外的数据文件没有被打包到可执行文件中。事实上,我在 cabal-install 文档中找到了以下句子:
请注意,复制的可执行文件不是独立的,因为它们可能使用存储中的数据文件。来源
我也确实阅读了 pandoc 文档,它可以以一种已经包含这些额外文件的方式构建。
可以编译 pandoc,使 pandoc 使用的数据文件嵌入到二进制文件中。生成的二进制文件可以从任何目录运行,并且是完全独立的。使用 cabal,将 -fembed_data_files 添加到 cabal 配置或 cabal 安装命令。对于堆栈,使用 --flag pandoc:embed_data_files。来源
如何构建可执行文件cabal install
以防止出现上述错误消息?我希望这是可能的,而且我不会在这里遗漏一些重要的东西。
我试过
cabal install exe:myprogram --install-method=copy --overwrite-policy=always -fembed_data_files
无济于事。