我在 Ubuntu 13.10 。
我想在我的sbt项目中运行Visualization Toolkit (VTK)。
我已经在libvtk
上安装了突触包管理器。我可以毫无问题地使用VTK示例运行我的课程。但是当我尝试通过run
命令在SBT上运行它时,我得到UnsatisfiedLinkError
。
我尝试了几件事。这意味着将vtk.jar
添加到项目的lib
文件夹中,并为Artenum的vtk尝试几个sbt依赖项。
我喜欢在sbt中运行所有内容,因为我使用其他一些东西进行测试等等。只编译内部具有vtk依赖性的类对我来说是没有选择。
设置路径等我也试过了。但我的意思是,我可以安装许多其他依赖项,而无需在我的操作系统中设置路径。
另一种方法是找到一个像vtk这样的工作图形工具,它可以作为Java / Scala中的依赖项运行。
这是我的build.sbt:
name := "selfoo"
version := "1.0"
scalaVersion := "2.10.3"
scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature")
resolvers ++= Seq(
"Sonatype OSS" at "https://oss.sonatype.org/content/repositories/releases",
"Typesafe" at "http://repo.typesafe.com/typesafe/releases",
"artenum" at "http://maven.artenum.com/content/groups/public"
)
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-actor" % "2.2.1",
"com.typesafe.akka" %% "akka-remote" % "2.2.1",
"com.typesafe.slick" %% "slick" % "1.0.1",
"net.liftweb" %% "lift-json" % "2.5.1",
// "com.h2database" %% "h2" % "1.3.166",
// "com.googlecode.lanterna" % "lanterna" % "2.1.6",
"commons-net" % "commons-net" % "3.3",
"jline" % "jline" % "2.11",
"org.apache.mina" % "mina-core" % "2.0.4",
"org.apache.ftpserver" % "ftplet-api" % "1.0.6",
"org.apache.ftpserver" % "ftpserver-core" % "1.0.6",
"org.slf4j" % "slf4j-api" % "1.6.4",
"org.scala-lang" % "scala-swing" % "2.10+",
"vtk" % "vtk" % "5.8.0",
"org.slf4j" % "slf4j-simple" % "1.6.4")
这是我得到的堆栈跟踪:
[info] Compiling 1 Scala source to /root/IdeaProjects/selfoo/target/scala-2.10/classes...
[info] Running ScalaCone
[error] (run-main) java.lang.UnsatisfiedLinkError: vtk.vtkPoints.VTKInit()J
java.lang.UnsatisfiedLinkError: vtk.vtkPoints.VTKInit()J
at vtk.vtkPoints.VTKInit(Native Method)
at vtk.vtkObject.<init>(vtkObject.java:97)
at vtk.vtkPoints.<init>(vtkPoints.java:166)
at ScalaCone$.<init>(ScalaCone.scala:12)
at ScalaCone$.<clinit>(ScalaCone.scala)
at ScalaCone.main(ScalaCone.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
[trace] Stack trace suppressed: run 'last compile:run' for the full output.
java.lang.RuntimeException: Nonzero exit code: 1
at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run 'last compile:run' for the full output.
[error] (compile:run) Nonzero exit code: 1
[error] Total time: 3 s, completed 21.03.2014 13:13:02
我尝试从http://ij-plugins.sourceforge.net/vtk-examples/ScalaCone.html
运行示例ScalaCone答案 0 :(得分:1)
截至今天,vtk未列在maven-central上。由于它依赖于机器的部分,我怀疑它会是什么(因为在jar文件中编译目标代码有点违反平台无关代码的想法 - 是的,我知道像swt这样的东西)。
话虽这么说,最简单的解决方案是将vtk java接口直接包含在项目中作为thirdparty元素。
如果查看源代码发行版的wrap / java文件夹,您会发现一些* .in文件包含由cmake扩展的宏。这些您必须适应使用系统安装的vtk库的方式。其余的只是普通的java,你应该可以重用它。
我知道这不是最好的解决方案,但它应该允许你保持相当平台独立(你只需要加载这个共享库)。另一方面,如果您不关心平台独立性,我谦虚地建议首先放弃Java;)。