Dies ist möglicherweise ein Duplikat von diesem Beitrag . Aber die einzige Antwort scheint für mich nicht zu funktionieren, also poste ich hier meinen eigenen Fall in der Hoffnung, eine spezifische Lösung zu finden. Ich bin auf Linux Ubuntu Trusty.
Ich habe eine proprietäre C-Bibliothek, libMyLib.so, in / usr / local / lib (die in LD_LIBRARY_PATH enthalten ist).
Ich schrieb die Haskell-Bindungen an diese C-Bibliothek auf die übliche Weise. Main.hs:
%Vor% Ich kann dieses Programm mit ghci testen und übergebe es der Bibliothek und dem Verzeichnis, wo es es finden kann: ghci /usr/local/lib/ -lMyLib
und es funktioniert gut.
Jetzt versuche ich unabhängig davon, Stack zu verwenden, und diesem Leitfaden konnte ich folgen um einige nicht-triviale Programmbeispiele zu erstellen.
Allerdings kann ich das FFI Main.hs-Programm nicht stapeln, wenn es über die fehlende C-Bibliothek klagt:
Erster Versuch:
me@user:~/myProject$ stack build
Vor dem zweiten Versuch habe ich Folgendes hinzugefügt:
- extra-lib-dirs: [/usr/local/lib]
zur Datei stack.yaml hinzugefügt.
- extra-include-dirs: [/usr/local/lib]
zur Datei stack.yaml hinzugefügt (obwohl es wahrscheinlich nicht benötigt wird).
- hinzugefügt extra-libraries: lMyLib
in der Cabal-Datei des Projekts unter den Etiketten ausführbare oder Bibliothek (Ich habe auch extra-libraries: libMyLib.so
mit dem gleichen Ergebnis versucht).
Zweiter Versuch:
me@user:~/myProject$ stack build
Jetzt weiß es also, welche C-Bibliothek es benötigt, da es darüber geklagt hat, während das richtige extra Bibliotheksverzeichnis hinzugefügt wurde (siehe das Ende der Fehlermeldung). Ich bin mir nicht sicher, ob der Kommentar (you may need the "-dev" version)
relevant ist oder nicht.
Meine Frage: Ich stecke hier fest. Gibt es noch etwas, was ich mit den yaml- oder den cabal-Dateien oder anderswo machen sollte, damit stack build
die C-Bibliothek findet?
extra-libraries
sollte nur den Namen der Basisbibliothek haben, also extra-libraries: MyLib
.
Tags und Links haskell ffi haskell-stack