我正在尝试加载我正在使用的第三方库所需的JNI库。由于库只需要加载一次,所以我尝试将加载放在同伴类中我想这会管用的:
import com.example.Solver
object MyClass {
System.loadLibrary("jnilibrary")
}
class MyClass {
import MyClass._
implicit val solver = new Solver()
}
这会导致
UnsatisfiedLinkError
在解算器类初始值设定项中(
Solver.<clinit>
),显然是因为JNI库尚未加载。
将类更改为
class MyClass {
System.loadLibrary("jnilibrary")
implicit val solver = new Solver()
}
是的,所以我把图书馆放在了正确的地方。移动
System.loadLibrary
到之后
solver
声明导致它失败的方式与我尝试在同伴类中加载库时相同。
我推断它在运行初始化器之前试图解析类型,所以我尝试将库加载移到基类。我希望这意味着基类(加载库)在派生类(加载类)开始初始化之前已经完全初始化。
object Base {
System.loadLibrary("jnilibrary")
}
class Base {
import Base._
}
class MyClass extends Base {
implicit val solver = new Solver()
}
这也失败了。
很明显,我可以在类中加载库,但这是多余的。它可能不会太慢(假设loadlibrary不会重新加载已加载的库),但不像我希望的那样干净。
有没有办法让它和伴星一起工作?