3

Mac OSX(Mountain Lion、JDK 7、Scala 2.10、Z3 4.3)にScala ^ Z3を正常にインストールしました(次のとおりです:http://lara.epfl.ch/w/ScalaZ3)。この厄介なエラーが発生せずにこのWebサイト( http://lara.epfl.ch/w/jniz3-scala-examples )から例を実行できないことを除いて、すべてがうまくいきました。

java.lang.NoClassDefFoundError: scala/reflect/ClassManifest
    at .<init>(<console>:8)
    at .<clinit>(<console>)
    at .<init>(<console>:7)
        ...
Caused by: java.lang.ClassNotFoundException: scala.reflect.ClassManifest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 29 more

これは、反射の処理におけるScala2.9.xと2.10.xの非互換性が原因で発生すると思います。Scala2.9.xで同じ例のセットを実行できたので。私の質問は、これを回避してScala2.10でScala^ Z3を実行する方法はありますか?

4

3 に答える 3

5

プロジェクトのプロパティとビルドファイル(https://github.com/psuter/ScalaZ3/blob/master/project/build.propertiesおよびhttps://github.com/psuter/ScalaZ3/blob/master/project/ build / scalaZ3.scala)scalaZ3は現在scala2.9.2にのみ提供されていると思います。現在、クロスバージョンのサポートはありません。

「build.properties」ファイルでバージョンをscala2.10.0に変更した後、コードを取得して自分でコンパイルしようとする場合があります。コンパイル方法については、 https://github.com/psuter/ScalaZ3のページを参照してください。運が良ければ、コードはscala2.10でそのままコンパイルされます。そうでない場合は、いくつかの小さな修正が必要になる可能性があります。指を交差させます。

急いでいない場合は、Scala ^ Z3の作成者にバグを報告し、ライブラリのscala2.10バージョンを要求することもできます。

于 2013-03-05T13:12:00.333 に答える
3

将来誰かを助けるかもしれないので、GitHubでのあなたの問題への私の応答からの指示をコピーしています。

現在の状況では、古いsbtプロジェクトはScala2.10とうまく混ざっていないようです。Linux用のプロジェクトの「手動」コンパイルの手順は次のとおりです。これは、Z3 4.3(Z3 gitリポジトリから取得)とScala2.10で機能します。元の手順に従ってZ3をインストールした後:

最初にJavaファイルをコンパイルします。

$ mkdir bin
$ find src/main -name '*.java' -exec javac -d bin {} +

次に、Cファイルをコンパイルします。このためには、最初にJNIヘッダーを生成してから、共有ライブラリーをコンパイルする必要があります。以下のコマンドのオプションはLinux用です。JNIヘッダーがどこにあるかを見つけるため(new java.io.File(System.getProperty("java.home")).getParentに、Scalaコンソールで実行します(そして結果に追加/includeします)。

$ javah -classpath bin -d src/c z3.Z3Wrapper
$ gcc -o lib-bin/libscalaz3.so -shared -Wl,-soname,libscalaz3.so \
        -I/usr/lib/jvm/java-6-sun-1.6.0.26/include \
        -I/usr/lib/jvm/java-6-sun-1.6.0.26/include/linux \
        -Iz3/4.3/include -Lz3/4.3/lib \
        -g -lc -Wl,--no-as-needed -Wl,--copy-dt-needed -lz3 -fPIC -O2 -fopenmp \
        src/c/*.[ch]

次に、Scalaファイルをコンパイルします。

$ find src/main -name '*.scala' -exec scalac -classpath bin -d bin {} +

2.10に移行するときに一般的な「機能の警告」と、完全ではないパターン一致に関する別の警告が表示されます。

それでは、すべてからjarファイルを作成しましょう...

$ cd bin
$ jar cvf scalaz3.jar z3
$ cd ..
$ jar uf bin/scalaz3.jar lib-bin/libscalaz3.so

bin/scalaz3.jar...そして今、あなたはあなたが必要とするすべてを含んでいるはずです。試してみましょう:

$ export LD_LIBRARY_PATH=z3/4.3/lib
$ scala -cp bin/scalaz3.jar
scala> z3.scala.version

お役に立てれば!

于 2013-03-06T16:28:19.990 に答える
1

これは質問に直接答えることはありませんが、で構築しようとしている他の人を助けるかもしれませscalaz3scala 2.10

で構築ScalaZ3Scala 2.10.1ましZ3 4.3.0Windows 7http://lara.epfl.ch/w/jniz3-scala-examplesinteger constraintsの例でテストしましたが、正常に動作しています。

Z3の構築

Z3 4.3.0codeplexでのダウンロードにはlibZ3.libファイルは含まれていません。そのため、ソースをダウンロードして自分のマシンでビルドする必要がありました。ビルドプロセスは非常に簡単です。

ScalaZ3の構築

現在、build.propertiessbtバージョン0.7.4とscalaバージョンがあり2.9.2ます。これはうまく構築されます。build.scala(ファイルにいくつかの小さな変更を加える必要がありました。タスクで変更z3LibPath(z3VN).absolutePathします。)z3LibPath(z3VN).absolutePath + "\\libz3.lib"gcc

ここで、scalaのバージョンを2.10.1inに変更すると、 sbtの起動build.properties時にエラーが発生します。"Error compiling sbt component 'compiler-interface'"なぜこれが起こるのか私にはわかりません。

次に、sbtバージョンをに0.12.2、scalaバージョンをに変更2.10.1し、新しいソースから始めました。build.sbtを含むプロジェクトルートフォルダにも追加しましたscalaVersion := "2.10.1"0.12.2sbtでは、ファイルはバージョンbuild.propertiesの指定にのみ使用されることになっているため、これは必須です。sbtsbtバージョンの違いの詳細については、(https://github.com/harrah/xsbt/wiki/Migrating-from-SBT-0.7.x-to-0.10.x)を参照してください。

エラーが発生しますZ3Wrapper.java:27: cannot find symbol LibraryChecksumLibraryChecksum.javaこれは、ビルド()によって生成されることがサポートされているファイルが生成されproject\build\build.scalaないために発生します。packageタスクは()のタスクを実行しないようですproject\build\build.scala。タスク、、、compute-checksumおよびjavahgcc実行されません。これは、sbtがファイルがフォルダーの直下にあることを0.12.2想定しているために発生している可能性があります。build.scalaproject

LibraryChecksum.java次に、前のビルドから生成されたものをコピーし、ビルドを実行します。生成されたjarファイルには。が含まれていませんscalaz3.dll

次に、タスクを手動で実行javahgccました。これらのタスクのコマンドは、成功したビルドのログからコピーできますscala 2.9.2(scalaのコマンドに適切な変更を加えました2.10.1)。ここでも、いくつか変更を加える必要がありました。タスクのscala-library.jar クラスパスのフルパスを明示的に追加する必要がありました。javah

lib-bin\scalaz3.dll次に、を使用してjarファイルにを追加しましたjar uf target\scala-2.10\scalaz3.jar lib-bin/scalaz3.dll

于 2013-06-08T13:39:34.273 に答える