Podczas kompilacji pliku binarnego obserwuję różne zachowania łączące między dwoma komputerami.Co decyduje o powiązaniu z GHC w OS X?
Każdy ma taką samą GHC (7.8.3), ten sam kod, tak samo flagi (-Wall -O2
), sam libgmp (zainstalowany przez Homebrew na siebie):
machine-one$ otool -L my-binary
my-binary:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
machine-two$ otool -L my-binary
my-binary:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libgmp.10.dylib (compatibility version 13.0.0, current version 13.0.0)
nie mogę dla życia mnie Sprawdź, dlaczego numer libgmp
jest połączony dynamicznie na drugim komputerze.
Pod względem różnic, które udało mi się rozpoznać: GHC został zainstalowany przez binary distribution for OS X na pierwszym komputerze i Homebrew na drugim. W przypadku kompilatorów języka C mamy:
machine-one$ cc --version
Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix
machine-two$ cc --version
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix
Co zazwyczaj decyduje o działaniu powiązania i jak mogę wymusić jedną metodę łączenia lub drugą?
EDIT: Mam takie samo zachowanie zaobserwowano dzieje z zlib
na jeszcze innym komputerze, więc nie jest to problem GMP specyficzne.
EDIT: Mam zerwane ghc --info
z każdej z maszyn, tutaj są one dla machine one i machine two. I tutaj jest the diff między nimi.
EDIT: mam ponownie zainstalować na maszynie dwa GHC przez binarną dystrybucję, a na pewno wystarczy libgmp
jest nie dynamicznie powiązane kiedy skompilować mój binarny. Wygląda więc na to, że wiąże się to z instalacją GHC przez Homebrew.
Ciągle bardzo interesuje to, co się dzieje.
Myślę, że może to częściowo zależeć od sposobu kompilacji GHC. Czy dwie używane przez ciebie dystrybucje zostały skompilowane inaczej? – dfeuer
Podobne pytanie: [(link)] (http://stackoverflow.com/questions/10539857/statically-link-gmp-to-an-haskell-application-using-ghc-llvm), które może pomóc. – ErikR
@dfeuer GHC był rzeczywiście zainstalowany inaczej - przez binarny vs przez Homebrew - ale nie mogę znaleźć żadnych informacji, czego się spodziewać w obu przypadkach. @ user5402 Rozumiem, że nie można przekazać statycznych flag linkujących na OS X, ponieważ nie ma możliwości statycznego połączenia 'libSystem' i' libiconv'. – jtobin