Ich beobachte ein anderes Verknüpfungsverhalten zwischen zwei Rechnern beim Kompilieren einer Binärdatei. Was bestimmt das Verknüpfungsverhalten für GHC unter OS X?
Jeder hat die gleiche GHC (7.8.3), denselben Code, gleichen Flags (-Wall -O2
), gleichen libgmp (von Homebrew auf jedem installiert ist):
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)
kann ich nicht für das Leben von mir herauszufinden, warum libgmp
dynamisch auf der zweiten Maschine verbunden ist.
In Bezug auf Unterschiede konnte ich erkennen: GHC wurde über die binary distribution for OS X auf der ersten Maschine und Homebrew auf der zweiten installiert. Für C-Compiler, die wir haben:
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
Was typischerweise das Vererbungsverhalten bestimmt, und wie kann ich ein Verknüpfungsverfahren oder das andere durchzusetzen?
EDIT: Ich habe das gleiche Verhalten mit zlib
auf einer anderen Maschine passiert, so ist es kein GMP-spezifisches Problem.
EDIT: Ich habe ghc --info
von jeder der Maschinen gerupft, hier sind sie für machine one und machine two. Und hier ist auch the diff zwischen den beiden.
EDIT: Ich habe ghc auf Maschine zwei über die Verteilung binären neu installiert, und sicher genug libgmp
ist nicht dynamisch gelinkt, wenn ich meine binären neu kompilieren. Es scheint also, dass dies mit der Installation von GHC über Homebrew zusammenhängt.
Noch ziemlich interessiert, was genau los ist.
Ich denke, es könnte teilweise davon abhängen, wie GHC kompiliert wurde. Könnten die beiden verwendeten Distributionen anders kompiliert sein? – dfeuer
Eine ähnliche Frage: [(link)] (http://stackoverflow.com/questions/10539857/statical-link-gmp-to-an-haskell-application-using-ghc-llvm), die helfen könnte. – ErikR
@dfeuer GHC wurde zwar anders installiert - über eine binäre vs via Homebrew - aber ich kann in beiden Fällen keine Informationen darüber finden, was dort zu erwarten ist. @ user5402 Ich verstehe, dass man die statischen Linking-Flags auf OS X nicht übergeben kann, da es keine Möglichkeit gibt, 'libSystem' und' libiconv' statisch zu verknüpfen. – jtobin