В пакете Haskell отсутствует библиотека c

У меня возникли проблемы со сборкой библиотеки hmatrix в OS X Lion. Глядя на файл .cabal, для него требуется библиотека gsl, поэтому я установил его с помощью macports. Файлы .a находятся в /opt/local/lib, а файлы .h — в /opt/local/include/gsl.

Как было предложено здесь, я изменил встроенный тип с Custom на Simple. . (без этого изменения я получаю аналогичную ошибку).

Когда я использую cabal configure, я получаю следующий вывод:

* Missing C library: gsl
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.

Итак, я попробовал cabal --extra-include-dirs=/opt/local/include --extra-lib-dirs=/opt/local/lib configure, но все равно получаю ту же ошибку. Я могу скомпилировать и скомпоновать программу на языке C, включающую gsl. Какие файлы ищет клика? Если у меня есть нужные файлы, как мне сказать, как их найти?

libgsl.a — это универсальный двоичный файл:

$ file /opt/local/lib/libgsl.a
    /opt/local/lib/libgsl.a: Mach-O universal binary with 2 architectures
    /opt/local/lib/libgsl.a (for architecture x86_64):  current ar archive random library
    /opt/local/lib/libgsl.a (for architecture i386):    current ar archive random library

ghc выглядит как 64-битный:

$ ghc --info
 [("Project name","The Glorious Glasgow Haskell Compilation System")
 ,("GCC extra via C opts"," -fwrapv")
 ,("C compiler command","/usr/bin/llvm-gcc")
 ,("C compiler flags"," -m64 -fno-stack-protector  -m64")
 ,("ar command","/usr/bin/ar")
 ,("ar flags","clqs")
 ,("ar supports at file","NO")
 ,("touch command","touch")
 ,("dllwrap command","/bin/false")
 ,("windres command","/bin/false")
 ,("perl command","/usr/bin/perl")
 ,("target os","OSDarwin")
 ,("target arch","ArchX86_64")
 ,("target word size","8")
 ,("target has GNU nonexec stack","False")
 ,("target has subsections via symbols","True")
 ,("Project version","7.4.2")
 ,("Booter version","7.4.2")
 ,("Stage","2")
 ,("Build platform","x86_64-apple-darwin")
 ,("Host platform","x86_64-apple-darwin")
 ,("Target platform","x86_64-apple-darwin")
 ,("Have interpreter","YES")
 ,("Object splitting supported","NO")
 ,("Have native code generator","YES")
 ,("Support SMP","YES")
 ,("Unregisterised","NO")
 ,("Tables next to code","YES")
 ,("RTS ways","l debug  thr thr_debug thr_l thr_p  dyn debug_dyn thr_dyn thr_debug_dyn")
 ,("Leading underscore","YES")
 ,("Debug on","False")
 ,("LibDir","/usr/local/Cellar/ghc/7.4.2/lib/ghc-7.4.2")
 ,("Global Package DB","/usr/local/Cellar/ghc/7.4.2/lib/ghc-7.4.2/package.conf.d")
 ,("Gcc Linker flags","[\"-m64\"]")
 ,("Ld Linker flags","[\"-arch\",\"x86_64\"]")
 ]

person munk    schedule 30.04.2013    source источник
comment
Полный выстрел в темноте: у вас установлен g++? Я помню, как установил другую библиотеку и получил похожие странные сообщения об ошибках (также не было найдено явно установленных библиотек C); позже оказалось, что для этого нужен еще и g++.   -  person Tikhon Jelvis    schedule 30.04.2013
comment
У меня установлен g++.   -  person munk    schedule 30.04.2013
comment
Пробовали ли вы cabal install -v hmatrix увидеть шаг, который не удался? Это может помочь сузить проблему.   -  person John L    schedule 01.05.2013
comment
@JohnL Это сработало ... Я пытался установить nix, как предложено ниже, и у меня возникли проблемы с компилятором C, который не мог создавать исполняемые файлы. На моем пути была версия gcc 4.8, с которой я играл некоторое время назад. Итак, в терминале с gcc 4.2 на пути сначала я попробовал cabal install -v hmatrix, и это сработало.   -  person munk    schedule 01.05.2013
comment
@usmcs рад, что вы исправили это. Я бы долго догадывался, прежде чем проверять версию gcc...   -  person John L    schedule 02.05.2013


Ответы (2)


В качестве альтернативы Mac-портам вы можете использовать менеджер пакетов nix для Mac. Он неплохо справляется с зависимостями c для доступных через него библиотек. В общем, я был доволен им больше, чем любым другим менеджером пакетов на Mac.

К сожалению, для Mac (Darwin), в отличие от Linux, не так много двоичных файлов, доступных через nix, поэтому установка ghc часто означает ожидание его компиляции.

Команды для установки ghc и hmatrix после установки nix:

nix-env -iA nixpkgs-unstable.haskellPackages.ghc
nix-env -iA nixpkgs-unstable.haskellPackages.hmatrix

Обо всех необходимых зависимостях позаботятся за вас.

Я только что попробовал это на своем macbook pro, и hmatrix, кажется, работает правильно в ghci после того, как я попробовал команды с первых нескольких страниц файла руководство.

person Davorak    schedule 01.05.2013
comment
Я не стал использовать nix, но когда я попытался его собрать, я обнаружил несоответствие с версиями gcc, которые я использовал. Это определенно привело меня к решению. Спасибо! - person munk; 01.05.2013
comment
@usmcs Очень рад, что это помогло. - person Davorak; 01.05.2013

Я не человек Mac, но действительно похоже, что вы не установили версию «-dev». Я подозреваю, что для Mac вам нужно установить gsl-devel в дополнение к gsl. Если проблема не устранена, убедитесь, что у вас есть libgsl0-dev в пути к вашей библиотеке.

person mhwombat    schedule 30.04.2013
comment
Я установил версию -dev с port install gsl-devel +universal. Я проверю расположение libgsl0-dev. - person munk; 30.04.2013
comment
В моей системе нет libgsl0-dev. Чем это отличается от libgsl? - person munk; 01.05.2013
comment
Хм. У вас есть имя файла в форме libgsl?-dev? Я не знаю, важен ли 0 в libgsl0-dev, но я думаю, что бит -dev важен. Как правило, вам нужна -dev версия библиотеки, чтобы делать какие-либо разработки против нее. Возможно, что-то пошло не так при установке gsl-devel. - person mhwombat; 01.05.2013