eaplatanios / tensorflow_scala

TensorFlow API for the Scala Programming Language
http://platanios.org/tensorflow_scala/
Apache License 2.0
937 stars 95 forks source link

Exception in thread "main" java.lang.UnsatisfiedLinkError on darwin-cpu-x86_64 #39

Closed tarjeir closed 6 years ago

tarjeir commented 6 years ago

Hi

Very eager to test this API! But gave up the first time and noticed quite active development. Gave it another try now. Since I am not an expert in native library linking I still fail at the basics:

  1. This is what is in my sbt: resolvers += Resolver.sonatypeRepo("snapshots") libraryDependencies += "org.platanios" %% "tensorflow" % "0.1.0-SNAPSHOT" classifier "darwin-cpu-x86_64"

  2. My exception:

2017-11-05 12:23:53.847 [main] INFO TensorFlow Native - Extracting the 'tensorflowframework' native library to /var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_native_libraries7260031192430581912/libtensorflowframework.so. 2017-11-05 12:23:54.545 [main] INFO TensorFlow Native - Copied 11419400 bytes to /var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_native_libraries7260031192430581912/libtensorflowframework.so. 2017-11-05 12:23:54.547 [main] INFO TensorFlow Native - Extracting the 'tensorflow' native library to /var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_nativelibraries7260031192430581912/libtensorflow.so. 2017-11-05 12:23:54.891 [main] INFO TensorFlow Native - Copied 102600676 bytes to /var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_native_libraries7260031192430581912/libtensorflow.so. 2017-11-05 12:23:54.892 [main] INFO TensorFlow Native - Extracting the 'tensorflowjni' native library to /var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_native_libraries7260031192430581912/libtensorflowjni.so. 2017-11-05 12:23:54.895 [main] INFO TensorFlow Native - Copied 612240 bytes to /var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_native_libraries7260031192430581912/libtensorflowjni.so. Exception in thread "main" java.lang.UnsatisfiedLinkError: /private/var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_native_libraries7260031192430581912/libtensorflowjni.so: dlopen(/private/var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_native_libraries7260031192430581912/libtensorflowjni.so, 1): Library not loaded: @rpath/libtensorflow.so Referenced from: /private/var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_native_libraries7260031192430581912/libtensorflow_jni.so Reason: image not found at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086) at org.platanios.tensorflow.jni.TensorFlow$.$anonfun$load$4(TensorFlow.scala:95) at org.platanios.tensorflow.jni.TensorFlow$.$anonfun$load$4$adapted(TensorFlow.scala:93) at scala.Option.foreach(Option.scala:257) at org.platanios.tensorflow.jni.TensorFlow$.load(TensorFlow.scala:93) at org.platanios.tensorflow.jni.TensorFlow$.(TensorFlow.scala:155) at org.platanios.tensorflow.jni.TensorFlow$.(TensorFlow.scala) at org.platanios.tensorflow.jni.Tensor$.(Tensor.scala:24) at org.platanios.tensorflow.jni.Tensor$.(Tensor.scala) at org.platanios.tensorflow.api.tensors.Context$.apply(Context.scala:50) at org.platanios.tensorflow.api.package$.(package.scala:47) at org.platanios.tensorflow.api.package$.(package.scala) at TensorflowTest$.main(TensorflowTest.scala:12) at TensorflowTest.main(TensorflowTest.scala)

  1. This is the content of my library path ls -al /private/var/folders/0_/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_native_libraries7260031192430581912/ libtensorflow.so libtensorflow_framework.so libtensorflow_jni.so
  2. ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G29

Many thanks and sorry for the amateurish question

T

tarjeir commented 6 years ago

After fooling around on different stackoverflow threads etc. I found that SIP (Security Integrity Protection) is preventing @rpath to work on Mac OSX. To overcome that problem I ran :

install_name_tool -addrpath /private/var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_nativelibraries7260031192430581912/ /private/var/folders/0/7cysl_6s31v9904lxcgshlww0000gn/T/tensorflow_scala_native_libraries7260031192430581912/libtensorflow_jni.so

This solved it, but is rather impractical since this needs to be done runtime.:(

eaplatanios commented 6 years ago

@tarjeir Thanks a lot for giving this API a try. I really hope you find it useful. I'm sorry about the issue you've been having. It seems that loading the dynamic libraries correctly for multiple systems has been eventful. I have created a new issue, #41, to aggregate all these concerns and resolve this for everyone. I'll close this issue and we can continue the conversation and resolution there.