gpt4 book ai didi

scala - UnsatisfiedLinkError with native library under sbt

转载 作者:行者123 更新时间:2023-12-03 13:36:47 25 4
gpt4 key购买 nike

我正在使用 sbt 0.13 并且在使用 leveldbjni 时遇到问题sbt 下的本地库(即使在 issue #358 已解决之后)。一个 similar issue已经报道了 sbt 0.13 应该提供解决方案,但似乎没有。所以我在这里分享我的观察。

我收到了 UnsatisfiedLinkError使用以下示例应用程序。

  • 构建.sbt
    name := "example"

    version := "0.1"

    scalaVersion := "2.10.2"

    libraryDependencies += "org.fusesource.leveldbjni" % "leveldbjni-all" % "1.7"
  • build.properties
     sbt.version=0.13.0
  • 例子.scala
    import org.fusesource.leveldbjni.internal._

    object Example extends App {
    NativeDB.LIBRARY.load() // loading succeeds
    new NativeOptions() // UnsatisfiedLinkError under sbt
    }

  • 我正在使用 Oracle JDK 1.7 和 OS X 10.8.5。使用 run-main Example 运行示例在 sbt 下给出
    [error] (run-main) java.lang.UnsatisfiedLinkError: org.fusesource.leveldbjni.internal.NativeOptions.init()V

    同时运行它
    java -cp scala-library.jar:example_2.10-0.1.jar:leveldbjni-all-1.7.jar Example

    只是工作正常。当 Scala 在 bootclasspath 上时,应用程序甚至可以成功运行:
    java -Xbootclasspath/a:scala-library.jar -cp example_2.10-0.1.jar:leveldbjni-all-1.7.jar Example

    任何想法为什么会有 UnsatisfiedLinkError只在sbt下?

    最佳答案

    Any ideas why there's an UnsatisfiedLinkError only under sbt?



    正如@juereth 评论的那样:

    Sbt is using magic classloaders to try to prevent "leaks" of native loaded libraries, and allow you to re-import the library multiple times. Sbt will actually rename the DLL/SO/jnilib and load it in a special classloader. I'm not positive if this is only a plugin feature, or something for all apps.



    因此,对于当前的 sbt 设计,这在某种程度上是预期的行为。如果 fork 有效,那么这就是你必须做的。

    关于scala - UnsatisfiedLinkError with native library under sbt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19425613/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com