Я не повторяю больше, чем необходимо, краткое резюме: Следуя примеру 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)?