Chinaunix

标题: 今天我学会了 cabal 怎么用 [打印本页]

作者: flw    时间: 2009-03-05 22:51
标题: 今天我学会了 cabal 怎么用
发信人: flw (没有“昵”称), 信区: FuncProgram
标  题: 今天俺学会了 cabal 怎么用。
发信站: 水木社区 (Thu Mar  5 21:26:20 2009), 站内

以前都是上 Hackage 找模块,手工下载,然后用:

    runhaskell Setup configure
    runhaskell Setup build
    sudo runhaskell Setup install

觉得挺不方便的,经常看到网页上提到 cabal 这个包管理工具,
但是一直都不知道怎么用,windows 上和 debian 上都没有这个命令,
但是看 GHC 的文档里面,确实是有 Cabal 这个模块的,
一直都搞不太明白,也没认真去搞。

今天花了点时间了解了一下 http://www.haskell.org/cabal/
原来真的很方便啊!

原来 cabal 命令需要到
http://www.haskell.org/cabal/download.html
单独下载才行(搞不懂为什么不包含到标准的 GHC 发布里去)
windows 上的话,下载
http://www.haskell.org/cabal/rel ... all-0.6.2/cabal.exe
就可以了,然后:

更新 package list
cabal update

查看 package list
cabal list | less

安装 package(以 wxHaskell 为例):
cabal list | grep wx
cabal install wx
(会自动处理依赖关系)
(不太爽的一点是 install 的 package name
和 import 的 Module.Name 经常不一样,这点不如 CPAN)
作者: ihere    时间: 2009-03-12 10:01
cabal 将模块安装到了哪里??win下是安装到了c:\program files\haskell,我觉得应该安装到ghc的目录下吧,我已经改了cabal的config文件了,将4个地方都改了!!

ubuntu下是安装到了当前用户的.cabal下了,请问怎么修改呢??还是不用修改呢??

Ubuntu下我装了个ArrayRef的模块,但是import之后编译出错了!!

先谢谢flw
作者: MMMIX    时间: 2009-03-12 10:14
原帖由 ihere 于 2009-3-12 10:01 发表

ubuntu下是安装到了当前用户的.cabal下了,请问怎么修改呢??还是不用修改呢??

干嘛要修改?

Ubuntu下我装了个ArrayRef的模块,但是import之后编译出错了!!

怎么编译的?出的什么错?
作者: ihere    时间: 2009-03-12 11:14
ubuntu下不用修改,那是不是同理win下编译到C:\program files\haskell也不用修改???

编译报错的信息是:
compilation IS NOT required
test2.o: In function `sEh_info':
(.text+0x8b9): undefined reference to `__stginit_ArrayRefzm0zi1zi3_DataziRef_'
collect2: ld 返回 1

我在代码里引用了:
import Data.Ref
作者: ihere    时间: 2009-03-12 11:15
编译命令行就是:

ghc -o test test.hs
作者: ihere    时间: 2009-03-12 11:18
也谢谢大法师
作者: MMMIX    时间: 2009-03-12 12:07
原帖由 ihere 于 2009-3-12 11:14 发表
ubuntu下不用修改,那是不是同理win下编译到C:\program files\haskell也不用修改???

关键是,你为什么要修改?
编译报错的信息是:
compilation IS NOT required
test2.o: In function `sEh_info':
(.text+0x8b9): undefined reference to `__stginit_ArrayRefzm0zi1zi3_DataziRef_'
collect2: ld 返回 1

我在代码里引用了:
import Data.Ref

引用你安装在自己主目录下的其他模块有问题么?是不是把这个模块装到系统目录下就没有问题了呢?

[ 本帖最后由 MMMIX 于 2009-3-12 12:10 编辑 ]
作者: flw    时间: 2009-03-12 12:15

看来我比楼主要聪明一些。
我看到这个现象以后,也有点不爽,不过我犹豫了一下,没改。
作者: ihere    时间: 2009-03-12 12:47
之所以修改路径确实是觉得不爽,尤其是win下

引用自带的模块没问题,因为这个例子不光是用了ArrayRef一模块
作者: ihere    时间: 2009-03-12 12:51
to flw,你确实是坏人,你觉得不爽应该下大力气解决这个问题,并附带着在这个帖子里写上办法,恩恩!!
作者: flw    时间: 2009-03-12 13:57
原帖由 ihere 于 2009-3-12 12:51 发表
to flw,你确实是坏人,你觉得不爽应该下大力气解决这个问题,并附带着在这个帖子里写上办法,恩恩!!

我比较容易接受新事物。
我不排斥那些对我来说无关痛痒的东西。
作者: DQP    时间: 2009-03-12 14:05
把握的回复删了吧
不该在这么好的板块里水的....

[ 本帖最后由 DQP 于 2009-3-12 14:10 编辑 ]
作者: MMMIX    时间: 2009-03-12 14:12
原帖由 ihere 于 2009-3-12 12:47 发表
之所以修改路径确实是觉得不爽,尤其是win下

哦,我也常这么干。

引用自带的模块没问题,因为这个例子不光是用了ArrayRef一模块

你有仔细看我的回复么?
作者: ihere    时间: 2009-03-13 17:41
问题解决了:http://www.haskell.org/pipermail ... -August/010788.html

"
You need to tell ghc that you want to link package mtl.

ghc -package mtl forth.lhs
or more automatic
ghc --make forth.lhs
"
作者: ihere    时间: 2009-03-13 17:52
自我检讨,确实是犯了非常低级的错误!!
作者: ihere    时间: 2009-03-14 09:06
同样的程序在Ubuntu下大小是708K,在win下是1.9M,差别还真是大
作者: win_hate    时间: 2009-03-14 11:00
估计它需要 linux 环境下一些很常见的库,而这些库在 win 上一般是没有的,所以 win 版的做成静态连接了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2