GHC 外部 hs_init/hs_add_root 崩溃
不必要的我就不重复了,简单总结一下: 遵循 Adder
本教程中的示例,在装有 VS 2010 的 win7 (64) 计算机上。 但我不使用 C++,而是使用纯 C。
当将 cl(MS 编译器)与 cl /Zi(并且没有其他标志)一起使用时,它会按预期工作。 如果不使用/Zi
,然后尝试执行exe就会陷入困境。
为什么? (必须有一些编译器/链接选项使 haskell dll 启动时的某些 init 出错)
编辑: 一些调查:
/Zi
不影响优化。然而,/Zi
确实意味着/debug
;请参阅 /DEBUG
(生成调试信息)了解更多信息。
/DEBUG
更改 /OPT 的默认值
选项从 REF
到 NOREF
以及从 ICF
到 NOICF
(因此,您需要明确指定/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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论