Skip to content

NoClassDefFoundError when trying to use CLBlast #3

@blueberry

Description

@blueberry

I include JOCL-0.2.0-RC1-SNAPSHOT and JOCLBlast-0.0.1-SNAPSHOT in my Cloajure leiningen project (basically the same as maven, an uses maven repositories and poms etc.)

I start the REPL and:

(import 'org.jocl.CL)
;;org.jocl.CL
(CL/setExceptionsEnabled false)
;;nil

So, JOCL loads and works as always.

But, then:

(import 'org.jocl.blast.CLBlast)
;;org.jocl.blast.CLBlast
(CLBlast/setExceptionsEnabled false)
;;NoClassDefFoundError Could not initialize class org.jocl.blast.CLBlast  uncomplicate.neanderthal.examples.guides.tutorial-opencl-test/eval51311 (form-init3160172747902287401.clj:416)

CLBlast itself is available on the system and can be loaded from Java:

(System/loadLibrary "clblast")
;;nil

As JOCL works well, I suspect there is some subtle error with JOCLBlast's library loading in exotic class loader setups (such as in Clojure). This is the complete stack trace:

                      REPL:  432  uncomplicate.neanderthal.examples.guides.tutorial-opencl-test/eval51325
                      REPL:  432  uncomplicate.neanderthal.examples.guides.tutorial-opencl-test/eval51325
             Compiler.java: 6927  clojure.lang.Compiler/eval
             Compiler.java: 6890  clojure.lang.Compiler/eval
                  core.clj: 3105  clojure.core/eval
                  core.clj: 3101  clojure.core/eval
                  main.clj:  240  clojure.main/repl/read-eval-print/fn
                  main.clj:  240  clojure.main/repl/read-eval-print
                  main.clj:  258  clojure.main/repl/fn
                  main.clj:  258  clojure.main/repl
    interruptible_eval.clj:  100  clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
                  AFn.java:  152  clojure.lang.AFn/applyToHelper
                  AFn.java:  144  clojure.lang.AFn/applyTo
                  core.clj:  646  clojure.core/apply
                  core.clj: 1881  clojure.core/with-bindings*
                  core.clj: 1881  clojure.core/with-bindings*
               RestFn.java:  425  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   85  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  219  clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
    interruptible_eval.clj:  190  clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
                  AFn.java:   22  clojure.lang.AFn/run
   ThreadPoolExecutor.java: 1142  java.util.concurrent.ThreadPoolExecutor/runWorker
   ThreadPoolExecutor.java:  617  java.util.concurrent.ThreadPoolExecutor$Worker/run
               Thread.java:  745  java.lang.Thread/run

The tooling (I use emacs and emacs-cider for Clojure) recognizes CLBlast class and offers code completion, so the class itself is obviously available in the project, but the problem is in the library loading phase.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions