www tutorial software org instalar scala sbt

scala - tutorial - UnsatisfiedLinkError con biblioteca nativa bajo sbt



scala sbt tutorial (1)

¿Alguna idea de por qué hay un UnsatisfiedLinkError solo bajo sbt?

Como comentó @juereth:

Sbt está utilizando los cargadores de clases mágicos para intentar evitar "fugas" de las bibliotecas nativas cargadas y permitirle volver a importar la biblioteca varias veces. Sbt realmente cambiará el nombre de DLL / SO / jnilib y lo cargará en un cargador de clases especial. No estoy seguro si esta es solo una característica del complemento, o algo para todas las aplicaciones.

Así que este es un comportamiento algo esperado con el diseño actual de sbt. Si el forking funciona, entonces eso es lo que tienes que hacer.

Estoy usando sbt 0.13 y tengo problemas al usar la biblioteca nativa leveldbjni en sbt (incluso después de que se resolvió el problema # 358 ). Ya se ha informado un problema similar para el cual sbt 0.13 debería proporcionar una solución, pero parece que no lo hace. Así que estoy compartiendo mis observaciones aquí.

Recibo un UnsatisfiedLinkError con la siguiente aplicación de ejemplo.

  • build.sbt

    name := "example" version := "0.1" scalaVersion := "2.10.2" libraryDependencies += "org.fusesource.leveldbjni" % "leveldbjni-all" % "1.7"

  • construir.propiedades

    sbt.version=0.13.0

  • Ejemplo.scala

    import org.fusesource.leveldbjni.internal._ object Example extends App { NativeDB.LIBRARY.load() // loading succeeds new NativeOptions() // UnsatisfiedLinkError under sbt }

Estoy usando Oracle JDK 1.7 y OS X 10.8.5. Ejecutando el ejemplo con run-main Example bajo sbt da

[error] (run-main) java.lang.UnsatisfiedLinkError: org.fusesource.leveldbjni.internal.NativeOptions.init()V

mientras que ejecutarlo con

java -cp scala-library.jar:example_2.10-0.1.jar:leveldbjni-all-1.7.jar Example

solo funciona bien La aplicación incluso se ejecuta con éxito cuando Scala está en la ruta de inicio:

java -Xbootclasspath/a:scala-library.jar -cp example_2.10-0.1.jar:leveldbjni-all-1.7.jar Example

¿Alguna idea de por qué hay un UnsatisfiedLinkError solo bajo sbt?