GHC 6.12 и макпоры
-
02-10-2019 - |
Вопрос
Я недавно установил (из двоичных установщиков) GHC 6.12 и Платформа Haskell 2010.1.0.1 На моем My 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
После некоторого гугула я нашел Длинная нить хэшкелл-кафе Обсуждая эту проблему. Дорога кажется, что 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
), но не работал. Удаление макпоров libiconv
Не на самом деле не вариант, поскольку у меня есть куча портов, которые установлены, которые зависят от него, - включая некоторые порты, которые я хочу Haskell ссылаться, как gd2
.
Из того, что я видел в Интернете, на самом деле, по-видимому, на самом деле, похоже, вы не можете связаться с библиотекой Macports во время компиляции GHC, и, похоже, не является решением. Однако эта нить была с конца 2009 года, поэтому я полагаю, что есть шанс, что у кого-то есть решение, обходной путь, нелепый хам ... что-нибудь, действительно. Так: Кто-нибудь знает, как получить GHC 6.12, чтобы связать против System Libiconv одновременно, как это ссылается на библиотеки от MacPorts? Или не в состоянии, способ сделать ссылку не ломать в некоторых других умных способов?
Решение
Я получал ту же ошибку на MacOSX 10.5.8, когда я установил Haskell-Platform-2010.1.0.1-I386 и попытался скомпилировать программу Haskell. Решение для меня было добавить опцию «-L / usr / lib» в GHC при составлении программы. Я считаю, что этому удалось получить линкер на первый поиск / usr / lib для библиотеки iconv, которая решила для меня проблему.
Другие советы
Я сделал свои проблемы, удачив Макпоры. Возможно, вы можете уйти с удалением версии Macports of Libiconv и любой библиотеки, которая зависит от нее.
Я несколько стыдно признать это, но у меня был какой-то успех с заклинаниями, как следующее:
LIBRARY_PATH=/usr/lib:/opt/local/lib cabal install --ghc-option="-L/usr/lib" SDL-gfx
Я зафиксировал:
stack build --ghc-options "-L/usr/lib"
Это странно: Платформа AFAIK 2010.1.0.1 не работает на OS X 10.5.8, это сообщалось и проверено несколькими людьми, включая себя, а также более интересно - тобой!
Возможно, это может быть лучше cabal configure --extra-lib-dir=/usr/lib
Это решает проблему на osx Mountain Lion