如何编译依赖项以在 cabal 沙箱中进行分析

Posted

技术标签:

【中文标题】如何编译依赖项以在 cabal 沙箱中进行分析【英文标题】:How to compile dependencies for profiling in a cabal sandbox 【发布时间】:2014-09-24 15:03:38 【问题描述】:

我正在尝试使用分析选项编译我的一个可执行文件。我在我的 cabal 文件中添加了 -prof 选项。当我这样做时,我会收到一条消息,说

Could not find module ‘Package-X’
Perhaps you haven't installed the profiling libraries for package ‘package-x’?
Use -v to see a list of the files searched for.

我该怎么做?我试过cabal install --only-dependency --reinstall,得到以下回复:

All the requested packages are already installed:
Use --reinstall if you want to reinstall anyway.

我已经用过--reinstall了怎么办?我也试过cabal configure --enable-profiling-libraries等...

【问题讨论】:

this question 能解决您的问题吗? 它有点解决它。 cabal install --reinstall world 做了一些事情。但是我仍然无法为我的可执行文件启用分析。如果我在 cabal 文件中添加 -prof,它会抱怨它不需要。如果我删除它+RTS -p 抱怨二进制文件没有通过分析支持编译... 您是否将library-profiling: True 添加到您的.cabal/config 文件中?这似乎是安装带有分析功能的库的真正诀窍。 不,我没有。我认为cabal configure --enable-library-profiling 会成功。但是,我的问题可能是我使用了不同的沙箱源......我正在尝试重新编译它们 .cabal/config 文件中将library-profiling 设置为True 可以解决问题。但我不得不删除沙箱 (cabal sandbox delete; cabal sandbox init; cabal sandbox install)。它重新安装了所有东西(普通+配置库)。我宁愿避免重新安装正常的。 【参考方案1】:

bheklilr 建议的 link 提供了帮助,但没有立竿见影。

我最终在我的.cabal/config 文件中添加了library-profiling: True 并重新安装了所有内容。 cabal install --reinstall wolrd 没用,可能是因为我在沙箱里。然而,好的 关于沙盒的事情是你可以把它们扔掉,所以我重新安装了所有东西

cabal sandbox delete
cabal sandbox init
cabal install

尽管这个解决方案有效,但由于以下原因并不令人满意:

我不得不修改 .cabal/config 这是一个全局文件,而在一个理想的世界 我应该只需要修改我的沙箱。但是,我没有尝试创建本地 cabal 配置文件

我不得不重新安装所有东西,即每个库的分析版本以及已经安装的普通版本。

【讨论】:

根据文档 (haskell.org/cabal/users-guide/…),您可以通过在与您的 cabal.sandbox.config 相同的目录中创建一个名为 cabal.config 的文件来设置项目本地配置文件。这应该允许您为您的沙箱设置library-profiling: True 选项。

以上是关于如何编译依赖项以在 cabal 沙箱中进行分析的主要内容,如果未能解决你的问题,请参考以下文章

在 ec2 上安装 playwright 依赖项以在 Java 中使用它

在 PInvoke 中管理大量 3rdparty 依赖项以提高编译速度

如何解决 cabal 中损坏的依赖关系?

如何在 cabal 中查找已安装的包的反向依赖项

如何将 dev 分支安装到 Cabal 沙箱中

如何在 .cabal 中指定对外部 C 库的依赖?