hMatrix разбивает файл, в чем может быть причина?

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

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. Определения в libiconv MacPorts (досадно) как-то отличаются от определений в libiconv OS X. Вот еще несколько объяснений.

У меня возникла та же проблема, и я решил передать аргумент --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.

Другие вопросы по тегам