2011-09-12 139 views
3

我試圖在Win XP上使用Cygwin和JDK 1.7.0編譯Scala^Z3,但它沒有像預期的那樣工作。在Windows上編譯Scala^Z3

我做了以下內容: - 使用SBT 0.7.4 - 使用電流斯卡拉^ Z3改版從GitHub - 使用Cygwin和它的GCC - 使用JDK 1.7.0(javac的)

「SBT更新「是成功的。在幾個錯誤 「SBT包」 結束,說明像下面的未定義的引用:

\ psuter-ScalaZ3-35cb691 \ SRC \ C/z3_Z3Wrapper.c:10:未定義參考`_Z3_mk_config」

爲了使它在所有我改變工作.... \ PSuterScalaZ3 \ psuter-ScalaZ3-35cb691 \項目\編譯\ scalaz3.scala線74:

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

在主頁上聲明它也適用於Windows。完全可以嗎? 有預編譯的jar嗎?

我看到一個z3.jar在這裏:http://lara.epfl.ch/~psuter/jniz3/z3.jar 這也是一個Linux版本,我猜?因爲它沒有爲我工作,要麼...

斯卡拉^ Z3是一個非常好的一段代碼(如果我能得到它的工作;))

回答

3

比較遺憾的是,在SBT腳本目前確實僅適用於Linux(正如您可以從絕對路徑中看出的那樣,我們不太習慣於讓外部用戶)。

下面是我用它來編譯Windows下的步驟:

  • 用javac所有的Java源代碼(有沒有依賴性)
  • 使用JAVAH生成的頭文件
  • 編譯所有的斯卡拉帶有scalac的源文件(僅使用Java .class文件作爲依賴項)
  • 使用Visual Studio編譯.c + .h文件
  • 手動創建一個包含所有內容的jar文件

我們也希望一旦我們將Scala^Z3改編成Z3 3.1的新變更後,我們也會發佈一個預編譯的.jar文件和Linux和Windows的共享庫。

編輯 GitHub存儲庫現在包含爲Scala 2.9.1和Z3 3.2準備的預編譯.jar文件。它適用於Windows和Linux(32位)。存儲庫還包含有關如何在Windows中使用MinGW而不是Visual Studio編譯共享庫的更詳細說明(因此不再需要VS運行時庫)。

+0

預編譯的.jar(Z3 3.1)將是真棒......當你認爲這可能是可用?因爲我們需要.parseSmtlib2String()方法。 –

+0

我使用了預編譯的.jar(版本1.1與z3.dll 2.19),但它指出:「警告:超出分配的虛擬內存。無法分配大小爲1561721928的對象。當前分配大小:142676。高水印:0」只是Scala^Z3主頁上的ppt幻燈片中的一小部分。什麼可能是錯的?它真的需要那麼多的RAM嗎?錯誤的DLL? –

+0

希望下週結束。內存問題可能來自於最新的Z3有兩種管理內存的方式。手動或自動。我不確定如何使用針對較舊Z3編譯的共享庫與該方面進行交互。 – Philippe

3

幾個月前我有類似的問題,這是我爲了使用Visual Studio 2010進行編譯而必須做的。我不確定它是否仍然相關,因爲Scala^Z3和Z3本身發生了很大變化,但我希望它是有幫助的。

  1. 創建一個新的Visual C++ Win 32項目(.NET框架4) 創建的DLL。

  2. 在src/c /目錄下添加了所有.h和.c文件。 VC不知何故 抱怨「內聯」修改器和建議 刪除他們,我做了。

  3. 從Z3添加z3.h 2.19,Z3 2.16未被接受。還添加了相應的z3.lib(x86,尚未嘗試x64) 。 VC不會接受 z3.dll並且抱怨文件被損壞。不知道爲什麼,Z3 本身對我來說很好。

  4. 該項目編譯了13個警告,並創建了一個dll,其中 顯然必須命名爲scalaz3.dll。

  5. SBT編譯,增加scalaz3.dll到LIB斌,JAR整個事情 一起scalaz3.jar

  6. '斯卡拉-classpath scalaz3.jar test.scala' 與scalaz3.jar和Z3。 DLL 在當前文件夾的作品

+0

感謝您的詳細步驟。 .dll確實必須被稱爲scalaz3.dll。當您運行Scala^Z3時,它會要求系統嘗試加載具有該確切名稱的庫。如果失敗,它將在.jar中查找該名稱的文件,將其複製到臨時目錄並從那裏加載它。 (臨時目錄名稱包含Scala^Z3當前版本的散列以避免衝突。)該名稱在* nix系統上也必須是libscalaz3.so,並且可能在MacOSX上爲libscalaz3.jnilib,且該平臺上支持Z3 。 – Philippe

+0

我終於找到了如何使用MinGW編譯共享庫,所以現在不再有z3.dll以外的依賴關係了。 – Philippe