是什么决定了OS X上GHC的链接行为?

托宾

编译二进制文件时,我观察到两台计算机之间的链接行为不同。

每个文件都有相同的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从每台机器上了,这里它们分别是第一台机器和第二台机器也是两者之间的区别

编辑:我已经通过分发二进制文件在机器2上重新安装了ghc,并且当我重新编译二进制文件时,确保没有足够libgmp动态链接。因此,这似乎与通过Homebrew安装GHC有关。

仍然对正在发生的事情非常感兴趣。

尼尔·梅休

关键区别在于2号机器/usr/local/lib位于链接器路径中,并且正在使用brew的链接器(/usr/local/Library/ENV/4.3/ld)。ghc即使未使用C后端进行代码生成,它仍然使用外部链接器,因此您可以将Haskell代码与用其他语言编写的代码结合在一起(对于Haskell与第三方库的许多FFI绑定而言,这是至关重要的)。因此,您应该真正问酿酒人为什么事情之间的联系有所不同。这实际上不是ghc问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是什么决定了Linux上共享库的二进制兼容性?

在Mac OS X上,适用于Python的IDE是什么?

用Docker在OS X上设置开发环境的正确方法是什么?

是什么决定物体的尺寸?

如何在OS / X上设置Haskell + ghc-mod?

C ++是什么决定了哪个C ++版本可以在特定架构上运行(例如Arduino)

OS X的UIGraphicsGetCurrentContext()是什么?

决定是否访问链接的因素是什么?

GHC(在Linux上)生成的.hi和.o文件是什么?

Mac OS X上Exposé的键盘快捷键是什么?

在OS X上打开docx,PDF和ZIP文件的默认程序是什么?

在Mac OS上,PATH是什么?

Mac OS X上的CGAL链接错误

在Mac OS X Yosemite上反转颜色的快捷方式是什么?

Mac OS X终端命令注销当前用户是什么?

是什么决定了PyCharms索引目录

在OS X 10.9.2上链接错误tinyxml

决定链接的onclick属性中的“ return false”是否阻止导航的因素是什么?

Windows,Linux和OS X上开箱即用的USB驱动器文件系统是什么?

在OS X上,ls -l中的第二个字段是什么意思?“链接数”是什么意思?

是什么决定了程序参数如何分开?

Mac Os X中.trashes文件的意义是什么?

选择ORM的决定因素是什么

OS X下文件名的无效字符是什么?

是什么决定了事件

Mac OS X上的darwinssl库位置是什么?

FreeBSD(FreeNAS)OS上的“滚轮”组的目的是什么?

在DC / OS上运行Druid的最佳方法是什么?

是什么决定了Powershell的已发布GUI