2013-04-30 3 views
7

Ich habe Probleme beim Aufbau der hmatrix library auf OS X Lion. Betrachtet man die .cabal-Datei, benötigt man die Bibliothek gsl, also habe ich sie mit Macports installiert. Die .a Dateien sind in/opt/local/lib und die .h Dateien sind in/opt/local/include/gslHaskell Paket fehlt c Bibliothek

Wie vorgeschlagen here Ich änderte den eingebauten Typ von Custom zu Simple. (Ohne diese Änderung bekomme ich einen ähnlichen Fehler).

Wenn ich cabal configure verwende ich erhalte die folgende Ausgabe:

* 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. 

Also habe ich versucht cabal --extra-include-dirs=/opt/local/include --extra-lib-dirs=/opt/local/lib configure, aber ich immer noch die gleichen Fehler. Ich kann ein c-Programm kompilieren und verknüpfen, das gsl enthält. Nach welchen Dateien sucht Cabal? Wenn ich die richtigen Dateien habe, wie kann ich ihnen sagen, wie sie zu finden sind?

libgsl.a ist eine Universal Binary:

$ 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 sieht aus wie es 64-Bit ist:

$ 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\"]") 
] 
+0

Komplette Aufnahme im Dunkeln: Haben Sie g ++ installiert? Ich erinnere mich daran, eine andere Bibliothek zu installieren und ähnliche seltsame Fehlermeldungen zu erhalten (es gab auch keine C-Bibliotheken, die eindeutig installiert waren); Später stellte sich heraus, dass es auch g ++ brauchte. –

+0

Ich habe g ++ installiert. – munk

+1

Haben Sie "cabal install -v hmatrix" probiert, um den fehlgeschlagenen Schritt zu sehen? Es könnte helfen, das Problem einzugrenzen. –

Antwort

2

Als Alternative zu Mac-Ports können Sie den Paketmanager nix für Mac verwenden. Es macht einen ziemlich guten Job, sich um die Abhängigkeiten für die Bibliotheken zu kümmern, die durch es verfügbar sind. Im Allgemeinen bin ich damit zufriedener als mit jedem anderen Paketmanager auf Mac.

Leider hat Mac (Darwin) im Gegensatz zu Linux nicht so viele Binärdateien über nix verfügbar, so dass die Installation von ghc oft bedeutet, dass man darauf warten muss, dass es kompiliert wird.

Die Befehle ghc und hmatrix nach der Installation von nix zu installieren sind:

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

alle benötigten Abhängigkeiten von Ihnen gepflegt werden.

Ich habe es gerade auf meinem Macbook pro versucht und hmatrix scheint in Ghci richtig zu funktionieren, nachdem ich Befehle von den ersten paar Seiten der tutorial ausprobiert habe.

+0

Ich habe nicht mit nix gearbeitet, aber als ich versuchte, es zu bauen, entdeckte ich die Diskrepanz mit den Versionen von gcc, die ich benutzte. Dies führt mich definitiv zur Lösung. Vielen Dank! – munk

+0

@usmcs Sehr froh, dass es geholfen hat. – Davorak

1

ich kein mac Person bin, aber es klingt wirklich wie Sie haven‘ t hat die "-dev" -Version installiert. Für einen Mac vermute ich, dass Sie gsl-devel neben gsl installieren müssen. Wenn das Problem weiterhin besteht, vergewissern Sie sich, dass Sie libgsl0-dev in Ihrem Bibliothekspfad haben.

+0

Ich habe die -dev-Version mit 'port install gsl-devel + universal' installiert. Ich werde den Standort libgsl0-dev überprüfen. – munk

+0

Ich habe libgsl0-dev nirgendwo auf meinem System. Was unterscheidet das von libgsl? – munk

+0

Hmmm. Haben Sie einen Dateinamen der Form 'libgsl? -dev'?Ich weiß nicht, ob die '0' in' libgsl0-dev' wichtig ist oder nicht, aber ich denke das '-dev' Bit ist. Im Allgemeinen benötigen Sie die '-dev'-Version einer Bibliothek, um jegliche Entwicklung dagegen durchzuführen. Vielleicht ist bei der Installation von 'gsl-devel' etwas schiefgelaufen. – mhwombat