3

我尝试使用 Cygwin 和 JDK 1.7.0 在 Win XP 上编译 Scala^Z3,但没有按预期工作。

我做了以下事情: - 使用 SBT 0.7.4 - 使用来自 github 的当前 Scala^Z3 修订版 - 使用 Cygwin 及其 gcc - 使用 JDK 1.7.0 (javac)

“sbt update”成功了。“sbt package”最终会出现几个错误,说明未定义的引用,如下所示:

\psuter-ScalaZ3-35cb691\src\c/z3_Z3Wrapper.c:10: 未定义引用`_Z3_mk_config'

为了使它工作,我将 ....\PSuterScalaZ3\psuter-ScalaZ3-35cb691\project\build\scalaz3.scala 第 74 行更改为:

惰性 val gcc : ManagedTask = if(isUnix || is32bit) {

在主页上声明它也应该适用于 Windows。有吗?是否有预编译的 jar 可用?

我在这里看到了一个 z3.jar:http://lara.epfl.ch/~psuter/jniz3/z3.jar 也是一个 Linux 版本,我猜?因为它对我也不起作用...

Scala^Z3 是一段非常好的代码(如果我能让它工作的话;))

4

2 回答 2

3

很抱歉,sbt 脚本目前确实只适用于 Linux(从绝对路径可以看出,我们还不太习惯有外部用户)。

以下是我在 Windows 下编译它的步骤:

  • 使用 javac 编译所有 Java 源代码(没有依赖项)
  • 使用 javah 生成头文件
  • 使用 scalac 编译所有 Scala 源代码(仅使用 Java .class 文件作为依赖项)
  • 使用 Visual Studio 编译 .c + .h 文件
  • 手动创建一个包含所有内容的 jar 文件

一旦我们使 Scala^Z3 适应 Z3 3.1 中的新变化,我们还希望发布带有 Linux 和 Windows 共享库的预编译 .jar 文件。

编辑GitHub 存储库现在包含为 Scala 2.9.1 和 Z3 3.2 准备的预编译 .jar 文件。它适用于 Windows 和 Linux(32 位)。该存储库还包含有关如何在 Windows 中使用 MinGW 而不是 Visual Studio 编译共享库的更详细说明(因此无需 VS 运行时库)。

于 2011-09-13T09:54:06.437 回答
3

几个月前我遇到了类似的问题,这是我必须做的才能用 Visual Studio 2010 编译它。我不确定它是否仍然相关,因为 Scala^Z3 和 Z3 本身发生了很大变化,但我希望尽管如此,它还是很有帮助的。

  1. 为创建 DLL 创建了一个新的 Visual C++ Win32 项目 (.NET Framework 4)。

  2. 在 src/c/ 目录中添加了所有 .h 和 .c 文件。VC 不知何故抱怨“内联”修饰符,一位同事建议删除它们,我照做了。

  3. 从 Z3 2.19 添加了 z3.h,不接受 Z3 2.16。还添加了对应的z3.lib(x86,x64还没试过)。VC 不接受 z3.dll 和有关文件损坏的投诉。不知道为什么,Z3本身对我来说很好用。

  4. 该项目编译时出现 13 个警告,并创建了一个显然必须命名为 scalaz3.dll 的 dll。

  5. sbt 编译,将 scalaz3.dll 添加到 lib-bin,将整个东西一起 jar 到 scalaz3.jar

  6. 当前文件夹中带有 scalaz3.jar 和 z3.dll 的“scala -classpath scalaz3.jar test.scala”有效

于 2011-09-15T07:16:53.990 回答