Tôi đang sử dụng sbt 0.13 và gặp sự cố khi sử dụng thư viện gốc leveldbjni dưới sbt (ngay cả sau khi issue #358 đã được giải quyết). A similar issue đã được báo cáo cho sbt 0,13 nên cung cấp một giải pháp nhưng có vẻ như nó không. Vì vậy, tôi đang chia sẻ những quan sát của tôi ở đây.UnsatisfiedLinkError với thư viện gốc theo sbt
Tôi nhận được UnsatisfiedLinkError
bằng ứng dụng ví dụ sau.
build.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
Example.scala
import org.fusesource.leveldbjni.internal._ object Example extends App { NativeDB.LIBRARY.load() // loading succeeds new NativeOptions() // UnsatisfiedLinkError under sbt }
Tôi đang sử dụng Oracle JDK 1.7 và OS X 10.8.5. Chạy ví dụ với run-main Example
dưới SBT cho
[error] (run-main) java.lang.UnsatisfiedLinkError: org.fusesource.leveldbjni.internal.NativeOptions.init()V
trong khi chạy nó với
java -cp scala-library.jar:example_2.10-0.1.jar:leveldbjni-all-1.7.jar Example
chỉ hoạt động tốt. Ứng dụng này thậm chí chạy thành công khi Scala là trên bootclasspath:
java -Xbootclasspath/a:scala-library.jar -cp example_2.10-0.1.jar:leveldbjni-all-1.7.jar Example
Bất cứ ý tưởng tại sao có một UnsatisfiedLinkError
chỉ dưới SBT?
Đây chỉ là giải pháp thay thế, nhưng bạn đã thử [cố định] (http://www.scala-sbt.org/release/docs/Detailed-Topics/Forking.html) chưa? – gourlaysama
@gourlaysama yes, với forking nó thực sự hoạt động nhưng, như bạn nói, nó chỉ là một workaround. Dù sao cũng cảm ơn bạn. –
Tôi cũng nên thêm rằng workaround forking chỉ hoạt động với sbt 0.13, không phải với các phiên bản trước đó. –