【问题标题】:Force Stack to look for .so files instead of .dylib on OS X?强制堆栈在 OS X 上查找 .so 文件而不是 .dylib?
【发布时间】:2016-11-21 05:59:44
【问题描述】:

我有一个本地构建的 stack 项目,它将 lib_.so 复制到 El Capitan 中的共享 lib 目录。此共享对象本身链接到许多其他对象,所有这些对象都是.so 文件。我有另一个stack 项目,它引用第一个项目作为本地依赖项,并希望找到它复制到所述目录的共享库,除了堆栈在共享目录中查找lib_.dylib 而不是lib_.so。它可能无法找到该文件。

有没有办法告诉堆栈它应该使用.so 文件?如果我将根文件重命名为.dylib,堆栈可以找到它,但找不到其他链接文件,所有这些文件都应该是.dylib

【问题讨论】:

  • 来自 Stack bugtracker。 OS X 上的共享库有.dylib 扩展名,而不是.so,所以我猜没有办法做到这一点。我认为这是由 GHC 强制执行的。所以第一个问题是,你为什么要在 OS X 上安装.so 文件?然后,如果 .so 是一个 Haskell 库,这是一个糟糕的设置,如果它是任何其他库,它只有一个不可移植的构建脚本。
  • 部分撤回:stackoverflow.com/a/2339910/53974 表明.so 对于可加载模块/捆绑包很常见(但非标准),您无法链接(它们' re 应该在运行时加载)。但同样,“不可能像共享库一样链接捆绑包。”因此,如果,那么您尝试做的事情就不应该起作用,即使这可能不是您在做的。

标签: macos haskell haskell-stack


【解决方案1】:

如果我将根文件重命名为 .dylib,堆栈可以找到它,但找不到其他链接文件,所有这些文件都应该是 .dylib。

我建议将所有库重命名为 .dylib,使用 https://stackoverflow.com/a/14887391/53974https://www.tekrevue.com/tip/batch-rename-files-os-x-yosemite/ 或其他谷歌搜索结果。我无法判断它是否有效,因为它取决于生成库的构建脚本有多错误,但您的结果表明构建脚本可能只是使用了错误的共享库扩展。

【讨论】:

  • 感谢您的回复:“可能只是为共享库使用了错误的扩展名。”可能是罪魁祸首,虽然它不是我的包裹,也不是一个简单的包裹。我会看看重命名他们是否有任何乐趣。
  • 我想象中的。请考虑支持或接受;-)。
  • 由于一些我不明白的链接怪癖,更改所有名称都不起作用。最后,维护者更改了构建脚本以在 OSX 上生成.so.dylib 文件。这解决了它。
猜你喜欢
  • 1970-01-01
  • 2011-08-25
  • 1970-01-01
  • 2015-11-05
  • 2016-08-14
  • 1970-01-01
  • 2023-03-13
  • 2015-04-15
  • 1970-01-01
相关资源
最近更新 更多