GHC 外部 hs_init/hs_add_root 崩溃

发布于 2024-11-04 05:03:31 字数 1252 浏览 1 评论 0原文

不必要的我就不重复了,简单总结一下: 遵循 Adder 本教程中的示例,在装有 VS 2010 的 win7 (64) 计算机上。 但我不使用 C++,而是使用纯 C。

当将 cl(MS 编译器)与 cl /Zi(并且没有其他标志)一起使用时,它会按预期工作。 如果不使用/Zi,然后尝试执行exe就会陷入困境。

为什么? (必须有一些编译器/链接选项使 haskell dll 启动时的某些 init 出错)

编辑: 一些调查:

/Zi不影响优化。然而,/Zi 确实意味着/debug;请参阅 /DEBUG(生成调试信息)了解更多信息。

/DEBUG 更改 /OPT 的默认值 选项从 REFNOREF 以及从 ICFNOICF(因此,您需要明确指定/OPT:REF/OPT:ICF)。]

/OPT:ICF 可能会导致同一地址被分配给不同的函数或读取仅数据成员(使用 /Gy 编译的 const 变量)。因此,/OPT:ICF 可以破坏依赖于函数地址或只读数据成员不同的程序。请参阅 /Gy(启用函数级链接) 了解更多信息。

有人可以确认 /OPT:ICF 会影响 Haskell/GHC 编译的共享库(dll)的加载吗?

I don't repeat more than necessary, brief summary:
Following the Adder example from this tutorial on a machine with win7 (64) with VS 2010.
But I don't use C++ but plain C.

When using the cl (MS compiler) with cl /Zi (and no other flag) it works like expected.
If not use /Zi and then try to execute the exe goes into flames.

Why?
(There must be some compiler/link options that make some init in the start of the haskell dll go wrong )

EDIT:
Some investigation:

/Zi does not affect optimizations. However, /Zi does imply /debug; see /DEBUG (Generate Debug Info) for more information.

/DEBUG changes the defaults for the /OPT option from REF to NOREF and from ICF to NOICF (so, you will need to explicitly specify /OPT:REF or /OPT:ICF).]

/OPT:ICF can result in the same address being assigned to different functions or read only data members (const variables compiled with /Gy). So, /OPT:ICF can break a program that depends on the address of functions or read-only data members being different. See /Gy (Enable Function-Level Linking) for more information.

Can someone confirm that /OPT:ICF will affect the loading of a Haskell/GHC compiled shared library(dll) ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文