2010-11-10 3 views
2

я пишу следующий temp.hs файла:программы Haskell с Data.Set оленьей кожи компиляция

import qualified Data.Set 
import System.Environment 

main :: IO() 
main = do 
     args <- getArgs 
     let fname = head args 
     print (fname) 

Он загружает в GHCI без ошибок:

$ ghci 
GHCi, version 6.12.3: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
Loading package ffi-1.0 ... linking ... done. 
Prelude> :load temp.hs 
[1 of 1] Compiling Main    (temp.hs, interpreted) 
Ok, modules loaded: Main. 
*Main> 

Когда я пытаюсь скомпилировать его, я получаю следующие ошибки:

$ ghc temp.hs -o temp 
Undefined symbols: 
    "___stginit_containerszm0zi3zi0zi0_DataziSet_", referenced from: 
     ___stginit_Main_ in temp.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Если я беру импорт Data.Set, он компилируется отлично.

Version Info:

$ ghc --version 
The Glorious Glasgow Haskell Compilation System, version 6.12.3 

$ gcc --ver 
Using built-in specs. 
Target: i686-apple-darwin10 
Configured with: /var/tmp/gcc_40/gcc_40-5494~112/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin10 --with-arch=apple --with-tune=generic --host=i686-apple-darwin10 --target=i686-apple-darwin10 
Thread model: posix 
gcc version 4.0.1 (Apple Inc. build 5494) 
+0

Это поведение не относится к Mac, поэтому было бы неплохо удалить теги 'osx' и' mac' и/или изменить заголовок, так как вопрос может быть полезен людям на других платформах. –

+0

@Travis Brown: спасибо! Я удалил теги и изменил заголовок. – highBandWidth

ответ

5

Вы можете добавить пакеты по отдельности (как KennyTM предлагает), или вы можете просто использовать --make, что гораздо удобнее несколькими способами:

ghc --make temp.hs -o temp 

Это заставит GHC искать любые необходимые модули среди установленных пакетов точно так же, как GHCi.

4
ghc -package containers temp.hs -o temp 

Вы можете проверить, какой пакет может понадобиться с GHCI, когда вы на самом деле использовать библиотеку:

GHCi, version 6.12.3: http://www.haskell.org/ghc/ :? for help 
    Loading package ghc-prim ... linking ... done. 
    Loading package integer-gmp ... linking ... done. 
    Loading package base ... linking ... done. 
    Loading package ffi-1.0 ... linking ... done. 
    Ok, modules loaded: Main. 
    Prelude Main> Data.Set.singleton 0 
> Loading package array-0.3.0.1 ... linking ... done. 
> Loading package containers-0.3.0.0 ... linking ... done. 
    fromList [0] 
    Prelude Main> 
Смежные вопросы