Я недавно установил (из бинарных установщиков) GHC 6.12 и Haskell Platform 2010.1.0.1 на мой Intel MacBook под управлением OS X 10.5.8, и изначально все работало нормально. Редактировать: Мне пришлось установить cabal
, alex
и happy
из источника, но после , что , все, казалось, работало нормально. Однако я обнаружил, что если я использую cabal install
для установки пакета, который зависит от библиотеки MacPorts ( например, , cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include gd
), в GHCi все работает нормально, но если я пытаюсь скомпилировать, я получаю ошибка
Linking test ...
Undefined symbols:
"_iconv_close", referenced from:
_hs_iconv_close in libHSbase-4.2.0.0.a(iconv.o)
"_iconv", referenced from:
_hs_iconv in libHSbase-4.2.0.0.a(iconv.o)
"_iconv_open", referenced from:
_hs_iconv_open in libHSbase-4.2.0.0.a(iconv.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
После некоторого поиска в Google, я нашел длинную ветку в Haskell-cafe , обсуждающую эту проблему. В результате получается, что MacPorts устанавливает обновленную версию libiconv , а двоичный интерфейс немного отличается от версии, включенной в систему. Следовательно, если вы попытаетесь соединиться с какой-либо библиотекой MacPorts, библиотека MacPorts libiconv тоже будет связана; и так как базовая библиотека была построена для связи с другой версией libiconv, вещи ломаются. Я попытался установить LD_LIBRARY_PATH
и DYLD_LIBRARY_PATH
и добавить дополнительные флаги, чтобы попытаться заставить его снова взглянуть на /usr/lib
( например cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include --extra-lib-dirs=/usr/lib --extra-include-dirs=/usr/include gd
), но ни один не помог , Удаление MacPorts libiconv
на самом деле не вариант, так как у меня установлено несколько портов, которые зависят от него - включая некоторые порты, к которым я хочу подключить Haskell, например gd2
.
Из того, что я видел в Интернете, результат, по-видимому, выглядит как «вы в обиде»: вы не можете связываться с какой-либо библиотекой MacPorts при компиляции с GHC, и, похоже, решения не существует. Тем не менее, эта тема была с конца 2009 года, поэтому я полагаю, что есть шанс, что у кого-то есть решение, обходной путь, нелепый взлом… что угодно, правда. Итак: кто-нибудь знает, как заставить GHC 6.12 связываться с системой libiconv в то же время, когда она связывается с библиотеками из MacPorts? Или, если это не удастся, способ сделать связывание неразрывным каким-то другим умным способом?