(Windows)从库中插入代码时,PutStrLn停止工作

时间:2019-07-14 14:39:40

标签: haskell ghc z3 ffi

我注意到一些非常奇怪的行为:

我正在尝试让haskell z3 bindings在Windows上工作。但是,如果我从库中将代码插入到Main模块中,putStrLn就会停止工作。怎么可能呢?

设置

  1. 我将z3求解器(z3.4.8.4)的预编译x64二进制文件用于Windows(并将其放在C:\mylibs\z3-4.8.4_x64中)。

  2. 然后我创建了一个堆栈项目haskellZ3Test

package.yaml中的相关部分:

dependencies:
- base >= 4.7 && < 5
- z3 <= 408.0

stack.yaml中的相关部分:

resolver: lts-13.28

packages:
- . 
- location:
    git: https://github.com/IagoAbal/haskell-z3.git
    commit: b10e09b8a809fb5bbbb1ef86aeb62109ece99cae
  extra-dep: true

extra-include-dirs:
- "C:\\mylibs\\z3-4.8.4_x64\\include"
extra-lib-dirs:
- "C:\\mylibs\\z3-4.8.4_x64\\bin"

问题

这里是Main版本1:

module Main where

import Z3.Monad

main :: IO ()
main = putStrLn "hello world"

如果我先stack build,然后再stack exec haskellZ3Test-exe,则按预期在命令行上得到hello world

但是-这里是Main版本2:

module Main where

import Z3.Monad

ast :: Z3 AST
ast = do
  a <- mkFreshBoolVar "A"
  b <- mkFreshBoolVar "B"
  mkImplies a b

main :: IO ()
main = putStrLn "hello world"

如果我先stack build然后再stack exec haskellZ3Test-exe,我什么也没得到...

老实说,我很困惑-编译和链接似乎正常。 非常感谢您的帮助。预先非常感谢。

0 个答案:

没有答案