Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从clojure访问ADL-SDK?_Clojure_Java Native Interface_Swig - Fatal编程技术网

如何从clojure访问ADL-SDK?

如何从clojure访问ADL-SDK?,clojure,java-native-interface,swig,Clojure,Java Native Interface,Swig,我是JNI和swig的新手,我试图从clojure访问AMD的ADL-SDK v6,但遇到了一些错误 ;; Clojure 1.5.1 => (com.vnetpublishing.swig.adl.AdapterInfo.) UnsatisfiedLinkError com.vnetpublishing.swig.adl.adlsdkJNI.new_AdapterInfo()J com.vnetpublishing.swig.adl.adlsdkJNI.new_AdapterInfo

我是JNI和swig的新手,我试图从clojure访问AMD的ADL-SDK v6,但遇到了一些错误

;; Clojure 1.5.1
=> (com.vnetpublishing.swig.adl.AdapterInfo.)
UnsatisfiedLinkError com.vnetpublishing.swig.adl.adlsdkJNI.new_AdapterInfo()J  com.vnetpublishing.swig.adl.adlsdkJNI.new_AdapterInfo (adlsdkJNI.java:-2)
=> (System/loadLibrary "libatiadlxx")
UnsatisfiedLinkError no libatiadlxx in java.library.path  java.lang.ClassLoader.loadLibrary (ClassLoader.java:1886)
swig模板如下所示

/* File jadl-sdk.i */


%module adlsdk
%{
#include "adl_sdk.h"
%}

%include "adl_defines.h"
%include "adl_structures.h"
%include "adl_sdk.h"
这些类是使用以下命令生成的

swig -java -package com.vnetpublishing.swig.adl -v -DLINUX -I${JAVA_HOME}/include -I${JADL_PATH}/ADL_SDK/include -outdir ${PACKAGE_PATH} jadl-sdk.i
有人知道如何让它发挥作用吗

-编辑-

我已经能够得到这个部分功能使用

  (clojure.lang.RT/loadLibrary "atiadlxx")
  (clojure.lang.RT/loadLibrary "jadlsdk")

唯一的问题是jadlsdk库不在java.library.path上,它在一个jar中,我无法从leiningen加载它。

我已经解决了这个问题。解决方案是作为静态构造函数的一部分运行loadLibrary调用,并将swig生成的包装器库安装为系统库(在linux上的/usr/lib下)

完整的代码可在github上获得,网址为

一旦安装了包装器库,并且java包装器代码已编译成jar,就可以将其加载到project.clj中的:resource path下

clojure端代码可访问@