2015-09-15 5 views
0

Я использую пакет hMatrix в среде ghci, и все работает нормально (я могу, например, импортировать Numeric.LinearAlgebra.HMatrix). Однако, когда я пытаюсь импортировать и использовать одни и те же вещи в скрипте, все ломается (я немного обрезал сообщение об ошибке для удобства чтения (более длинный список _base_GHCiIO-ошибок)). Например, эти две строки в файле создают ошибку (-ы) ниже. Кто-нибудь знает, что может быть причиной? Я нахожусь на Mac OS X Yosemite.hMatrix ломается в файле, что может быть причиной?

import Numeric.LinearAlgebra.HMatrix 

main = print ((2><1) [1.0::Float,1.0]) 

$ ghc 2_12.hs 
[1 of 1] Compiling Main    (2_12.hs, 2_12.o) 
Linking 2_12 ... 
Undefined symbols for architecture x86_64: 
    "_iconv", referenced from: 
    _hs_iconv in libHSbase-4.7.0.2.a(iconv.o) 
(maybe you meant: _hs_iconv, 
    _base_GHCziIOziEncodingziIconv_iconvEncoding9_info , 
    _base_GHCziIOziEncodingziIconv_iconvEncoding8_info, 
    _base_GHCziIOziEncodingziIconv_iconvEncoding9_closure , 
    _hs_iconv_open , _hs_iconv_close , 
    "_iconv_close", referenced from: 
    _hs_iconv_close in libHSbase-4.7.0.2.a(iconv.o) 
(maybe you meant: _hs_iconv_close) 
"_iconv_open", referenced from: 
_hs_iconv_open in libHSbase-4.7.0.2.a(iconv.o) 
(maybe you meant: _hs_iconv_open) 
"_locale_charset", referenced from: 
    _localeEncoding in libHSbase-4.7.0.2.a(PrelIOUtils.o) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see  
invocation) 

ответ

1

Возможно, у вас есть libiconv с MacPorts. Определения в libconv MacPorts (досадно) каким-то образом отличаются от тех, что содержатся в OS X libiconv. Here - несколько пояснение.

У меня была такая же проблема, и моим решением было передать аргумент -extra-lib-dirs =/usr/lib для cabal (/ usr/lib, где OS X хранит libiconv). Вы можете использовать cabal configure --extra-lib-dir=/usr/lib перед компиляцией, или, скорее всего, также cabal install --extra-lib-dir=/usr/lib. Вы также можете добавить инструкцию extra-lib-dirs в свой файл cabal./usr/lib уже всегда включается, но обычно сначала ищет каталог библиотеки MacPorts: добавив аргумент -extra-lib-dirs, вы убедитесь, что ghc ищет/usr/lib перед тем, как он ищет каталог библиотеки MacPorts.

+0

Я написал так: ghc --extra-lib-dirs =/usr/lib 2_12.hs и получил ghc: unrecognized flag: -extra-lib-dirs =/usr/lib Использование: Для получения базовой информации попробуйте параметр «--help». – stian

+1

Хмм, может быть, я неправильно помню, и это не флаг ghc, а вариант конфигурации для каббала. Попробуйте 'cabal configure -extra-lib-dir =/usr/lib' перед запуском ghc и сообщите мне, если это будет работать (я обновлю свой ответ). –

+0

спасибо, Да, я видел то же самое в этой ссылке, которая вот-вот выйдет. – stian