【发布时间】:2012-04-08 15:12:24
【问题描述】:
我正在尝试从 Haskell 源代码创建一个共享库。
我已尝试按照此处的说明进行操作:http://weblog.haskell.cz/pivnik/building-a-shared-library-in-haskell/,但我运气不佳。
当我使用 Haskell 64 位(来自 2011.4.0.0 的 ghc 7.0.4)编译时,出现以下错误:
ld: pointer in read-only segment not allowed in slidable image, used in
___gmpn_modexact_1c_odd
作为替代方案,我还尝试了 32 位版本,具体取决于我用来链接错误的确切标志,例如:
Library not loaded: /usr/local/lib/ghc-7.0.4/base-4.3.1.0/libHSbase-4.3.1.0-ghc7.0.4.dylib
我确实设法通过将 -lHSrts 添加到链接器行来更进一步。这让我能够成功链接和加载库,但是我无法使用 dlsym(或手动使用 nm | grep)找到函数名称
任何提示都将不胜感激,我们将不胜感激提供示例 make 文件或已在 OS X 上成功构建(并使用)共享库的构建行。我对 Haskell 很陌生,不知道我是否应该继续努力,假设问题出在我的头上,或者由于各种原因,我不应该期望它在 OS X 上工作。
这里有一个包含我尝试过的所有组合的 git 存储库:https://github.com/bennoleslie/haskell-shared-example 我确实设法得到了适用于 32 位 ghc 的东西,但还不是 64 位。
【问题讨论】:
-
不管怎样,我在 64 位 Mac OS 上的构建测试 1 - 6 中遇到了完全相同的错误。它在 Ubuntu 上为我构建和工作: $ haskell-shared-example# python test.py Blah: [ExampleStruct 50 60,ExampleStruct 50 60,ExampleStruct 50 60,ExampleStruct 50 60,ExampleStruct 50 60,ExampleStruct 50 60,ExampleStruct 50 60,ExampleStruct 50 60,ExampleStruct 50 60,ExampleStruct 50 60] 489
-
ghc 的更高版本会给出不同的错误吗?它的 ID 最高为 7.6.1 或 7.4.2
-
我安装了最新的稳定 Haskell 平台 (2012.4.0),其中包括 ghc 7.4.2。不同的确切原因,仍然失败。虽然可能不太致命的失败。需要更多调查。
-
感谢@Mark 让我真正尝试最新的似乎可以解决问题(请看,我只需要等待 6 个月,问题就会自行解决!)。
标签: macos haskell shared-libraries ghc