gpt4 book ai didi

haskell - 使用 cabal 时插件包未知符号

转载 作者:行者123 更新时间:2023-12-04 02:17:19 24 4
gpt4 key购买 nike

我正在搞乱插件包,但是我遇到了一个问题。

这是代码:

实用程序/Header.hs

module Util.Header(PT(..)) where

data PT a = PT a deriving Show

插件.hs
module Plug(helloPlugin) where
import Util.Header
helloPlugin :: PT Int
helloPlugin = PT 1

Main.hs
module Main where

import Util.Header
import System.Plugins

main :: IO ()
main = do
mv <- load "Plug.o" ["."] [] "helloPlugin"
case mv of
LoadFailure msg -> print msg
LoadSuccess _ v -> print $ show (v :: PT Int)

这一切都很好,然后用 ghc 编译。使用 Cabal 构建也可以正常工作,但是当我运行可执行文件时出现此错误:
plugintest: /home/kevin/.cabal/lib/plugins-1.5.4.0/ghc-7.6.3/HSplugins-1.5.4.0.o: unknown symbol `ghczm7zi6zi3_ErrUtils_zdsinsertzuzdsgo5_info'
plugintest: user error (resolvedObjs failed.)

我非常简约的 cabal 文件:
name:                plugintest
version: 0.1.0.0
license-file: LICENSE
build-type: Simple
cabal-version: >=1.8

library
hs-source-dirs: src
exposed-modules: Util.Header
build-depends: base ==4.6.*, plugins ==1.5.*

executable plugintest
main-is: Main.hs
build-depends: base ==4.6.*, plugins ==1.5.*, plugintest == 0.1.0.0
hs-source-dirs: src

现在我假设问题是它找不到“ErrUtils”模块,该模块是安装在/usr/lib/ghc-7.x.x 中的 ghc 包的一部分。
由于它使用的是 cabal,它将使用 $HOME/.cabal/lib/代替。

现在,如果我想让它可分发,我显然不想使用/usr/lib。可悲的是,我不太熟悉包的管理方式,也不熟悉插件包。

我有一种感觉,这是非常nooby,但我自己无法找到解决方案。

所以有几个问题:
  • 如何让我的依赖项以某种方式工作以使其可分发?
  • 看来我需要事先知道我的 Plugin.o 文件将依赖什么才能真正使用它们(如果我理解正确的话)。
    有没有办法打包一个我不必担心这个问题的 .o 文件? (对不起,如果这个问题太模糊,请随意忽略)

  • 提前致谢!

    最佳答案

    好的,所以我遇到了完全相同的问题。
    这是我找到的解决方法

    将加载调用更改为

    load "Plug.o" [".","dist/build/plugintest/plugintest-tmp"] [] "testplugin"

    确保使用 -c 或使用插件中的“make”库编译东西。

    对此感到非常恼火......该错误表明它在链接标准库时遇到问题,那么为什么显示这些 .o 文件可以解决它?
    无论如何,这对我有用,并且不需要大量处理 .cabal 文件。

    关于haskell - 使用 cabal 时插件包未知符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20426567/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com