GHC Foreign вылетает hs_init / hs_add_root - PullRequest
3 голосов
/ 29 апреля 2011

Я не повторяю больше, чем необходимо, краткое резюме: Следуя примеру Adder из этого урока на машине с win7 (64) с VS 2010. Но я не использую C ++, нообычный C.

При использовании cl (компилятор MS) с cl /Zi (и без других флагов) он работает как ожидалось.Если не использовать /Zi, а затем попытаться выполнить exe загорается.

Почему?(Должны быть некоторые опции компилятора / ссылки, которые приводят к тому, что некоторые инициализации в начале DLL на haskell идут не так)

РЕДАКТИРОВАТЬ: Некоторые исследования:

/Zi не влияет на оптимизацию.Однако /Zi подразумевает /debug;см. /DEBUG (Генерация отладочной информации) для получения дополнительной информации.

/DEBUG изменяет значения по умолчанию для опции /OPT с REF на NOREF и сICF до NOICF (поэтому вам необходимо явно указать /OPT:REF или /OPT:ICF).]

/OPT:ICF может привести к тому, что один и тот же адрес будет назначен различным функциям иличлены данных только для чтения (константные переменные скомпилированы с /Gy).Таким образом, /OPT:ICF может сломать программу, которая зависит от того, какой адрес функций или членов данных только для чтения различен.См. /Gy (Включить связывание на уровне функций) для получения дополнительной информации.

Может кто-нибудь подтвердить, что /OPT:ICF повлияет на загрузку скомпилированной общей библиотеки Haskell / GHC (dll)?

...