У меня есть библиотека JNI, как .jar, так и .so. Обратите внимание: библиотека предназначена для Java, а не Clojure. Прямо сейчас я смог запустить код, используя библиотеку в Java, на eclipse.Ошибка компоновщика на Clojure REPL, но не на скомпилированном банке при использовании библиотеки JNI
То, что я пытаюсь сделать сейчас, это заставить библиотеку работать на Clojure с помощью возможностей взаимодействия с Java. Мне это удалось, создав файл jar, но он не работает с REPL.
Вот что я сделал до сих пор:
Во-первых, я создал проект Leiningen и импортировали банку с креплениями JNI, чтобы я мог правильно импортировать и видеть классы из библиотеки как и ожидалось.
Затем я добавил родную библиотеку в свой LD_LIBRARY_PATH (необходимый для работы этой библиотеки на Java), и загрузка, кажется, очень хорошая (без ошибок) даже на REPL.
На данный момент, при попытке использовать любой конструктор (или функцию, для этого вещества) из библиотеки, я получаю ошибки компоновщика:
UnsatisfiedLinkError edu.upc.freeling.freelingJNI.new_Tokenizer(Ljava/lang/String;)J edu.upc.freeling.freelingJNI.new_Tokenizer (freelingJNI.java:-2)
Обратите внимание, что та же линия проходит как на Java и в банке Clojure, созданной с помощью «lein uberjar».
Я по-прежнему новичок в Clojure, и я не знаю, что может быть неправильным, если посмотреть, как работает версия jar.
Любые подсказки?
Спасибо за ваш ответ, но я боюсь, что я уже сделал это точная вещь, следуя шаги из блога, который вы упоминаете, прежде чем спрашивать. В конце концов, проблема была чем-то другим. Тем не менее, это может помочь будущим читателям, которые могут быть смущены импортом корневой библиотеки в Clojure. – Setzer22