我在编译二进制文件时观察两台机器之间的不同链接行为.
每个都有相同的GHC(7.8.3),相同的代码,相同的标志(-Wall -O2
),相同的libgmp(每个都由Homebrew安装):
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)
我不能为我的生活弄清楚为什么libgmp
在第二台机器上动态链接.
就差异而言,我已经能够认识到:GHC已经通过第一台机器上的OS X的二进制分发版和第二台机器上的Homebrew进行了安装.对于C编译器,我们有:
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
什么通常决定链接行为,我如何强制执行一种链接方法?
编辑:我观察到在zlib
另一台机器上发生了相同的行为,因此它不是特定于GMP的问题.
编辑:我ghc --info
从每台机器中拔出,这里是机器一和机器二.这也是两者之间的差异.
编辑:我已经通过了二进制分发重新安装机器两个在GHC,果然libgmp
是没有,当我重新编译的二进制我的动态链接.所以这似乎与通过Homebrew安装GHC有关.
仍然对正在发生的事情非常感兴趣.