GHC 6.12 и MacPorts - PullRequest
       40

GHC 6.12 и MacPorts

6 голосов
/ 28 апреля 2010

Я недавно установил (из бинарных установщиков) 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? Или, если это не удастся, способ сделать связывание неразрывным каким-то другим умным способом?

Ответы [ 6 ]

9 голосов
/ 10 мая 2010

Я получал ту же ошибку на MacOSX 10.5.8, когда я установил haskell-platform-2010.1.0.1-i386 и попытался скомпилировать программу на haskell. Решением для меня было добавить опцию "-L / usr / lib" в ghc при компиляции программы. Я считаю, что это удалось получить компоновщик для первого поиска / usr / lib для библиотеки iconv, что решило проблему для меня.

1 голос
/ 09 декабря 2010

Мне несколько стыдно это признавать, но я добился некоторого успеха с заклинаниями, подобными следующим:

LIBRARY_PATH=/usr/lib:/opt/local/lib cabal install --ghc-option="-L/usr/lib" SDL-gfx
1 голос
/ 30 августа 2010

Я убрал свои проблемы, удалив MacPorts. Вероятно, вы можете просто удалить версию libiconv для MacPorts и любую библиотеку, которая от нее зависит.

0 голосов
/ 24 июня 2016

Я исправил:

stack build --ghc-options "-L/usr/lib"
0 голосов
/ 18 октября 2013

Возможно, это может быть лучше cabal configure --extra-lib-dir=/usr/lib Это решает проблему с OSX Mountain Lion

0 голосов
/ 28 апреля 2010

Это странно: afaik Платформа 2010.1.0.1 не работает на OS X 10.5.8 , об этом сообщали и проверяли несколько человек, включая меня, и что еще более интересно - вами !

...