Постановка задачи:
Я желаю, чтобы вызвать функцию QuantLib Java из пространства имен Clojure, следующим образом:Clojure/QuantLib Interop: загрузки классов беды
(Date. 21 Month/September 2013)
До сих пор, я сделал следующее:
$ brew install boost
$ brew install quantlib
Скачан the generated SWIG interfaces.
Создан новый проект Leiningen.
Скопировано сказал интерфейсы в SRC/главная/Java/орг/quantlib/
Добавлено:
:jvm-opts ["-Djava.library.path=src/main/java"]
:java-source-paths ["src/main/java/"]
моему project.clj
.
Я следил за Bojan Nikolic's instructions on solving a very similar classloading problem, добавляя класс BKLoader.
Когда я загружаю мой core.clj
файл в РЕПЛ, я получаю следующее сообщение об ошибке:
UnsatisfiedLinkError org.quantlib.QuantLibJNI.new_Date__SWIG_1(III)J org.quantlib.QuantLibJNI.new_Date__SWIG1 (QuantLibJNI.java:-2)
Боян Николич a recommendation справиться с этими проблемами, которые загрузки классов я реализовывал, а также при попытке запустить это вниз. За этой связь, я добавил новый статический класс BKLoader
для загрузки QuantLibJNI, погрузил его с другими классами Java и попытался загрузки core.clj
в РЕПЛ снова к звонким трубам:
UnsatisfiedLinkError no QuantLibJNI in java.library.path java.lang.Classloader.loadLibrary (ClassLoader.java:1758)
В этот момент я вырву Класс Б. Николича из объявления ns в моем core.clj
и взгляните на classlojure. Предложение
Per Apage43 в #clojure
, в этот момент я бросаю следующее в моем core.clj
:
(classlojure/with-classloader
(.getClassLoader Date)
(System/loadLibrary "QuantLibJNI"))
Какие результаты в той же ошибки, как при вызове BKLoader
класса.
Я ценю любую информацию, которую любой из вас может принести. Благодаря!
Решение
Решение добавить банку QuantLib к :java-source-paths
в project.clj
:
:java-source-paths ["src/main/java" "/usr/local/lib/QuantLib.jar"]
Он использует пиво, что означает, что он находится в Mac OS X, поэтому инструменты Microsoft вряд ли помогут. Но предложение правильное, он должен проверить, доступны ли общие библиотеки. Это будет означать libQuantLib.so и libQuantLibJNI.so. –
Правильное решение (вероятно, прозрачное как грязь для любого, кто не работает с экосистемой Clojure) заключается в том, чтобы добавить банку QuantLib к «java-source-path» Leiningen'ам. Этот ответ заставил меня задуматься о скомпилированных файлах, и поэтому я считаю, что это хороший «правильный» ответ. – benkay