ssa*_*muu 7 java matlab swig class wrapper
我一直在使用Swig为用C++编写的库创建Java包装器.包装器生成一个包然后jar
'ed.文件正确编译并与java完美配合,但我无法从MATLAB中调用它.
我尝试在MATLAB中的静态Java路径文件中添加jar的路径,然后调用jar文件中的类,但是我得到错误"Undefined variable or class.."
或者如果我尝试使用的话javaObject(...)
"No class * can be located on Java class path"
.
我不确定我做错了什么.
编辑:
为了测试从MATLAB调用c ++库,我创建了一个简单的"数据读取器"类,它包含一个将随机生成vector< vector<double> >
的文件写入文本文件的函数和一个读取它的函数.
产生的痛饮文件是:SimpleReader.java
,DoubleVector.java
,exampleJNI.java
,example.java
,DoubleVector2.java
在包com.example.reader
.这些被编译和打包example.jar
(生成的库dll也被打包到jar中).
一切正常,从java调用它所以问题必须特定于MATLAB.MATLAB没有太多代码,因为似乎没什么用.我得到了
javaclasspath('c:/reader/reader.jar');
obj = com.example.reader.SimpleReader;
Run Code Online (Sandbox Code Playgroud)
我得到了什么 'Undefined variable "com" or class "com.example.reader.SimpleReader"'
一般来说,你应该能够做到这一点:
javaclasspath('/path/to/myjar.jar')
myobj = com.example.mypackage.MyObject;
myobj.someMethod(123);
Run Code Online (Sandbox Code Playgroud)
我已经在MATLAB上使用它已经有一段时间了并且没有遇到任何麻烦.也许您可以发布您正在使用的确切MATLAB代码?
我得到了
Run Code Online (Sandbox Code Playgroud)javaclasspath('c:/reader/reader.jar'); obj = com.example.reader.SimpleReader;
此时我得到'Undefined variable"com"或class"com.example.reader.SimpleReader"'
好吧,对于初学者,你提到你的jar文件被调用example.jar
,但你的MATLAB代码引用reader.jar
- 你确定你所引用的jar javaclasspath()
存在吗?你试过看它的内容吗?(例如,使用7zip或任何可以读取.zip格式文件的程序,因为.jar文件只是带有附加规范的.zip格式文件)
嗯...
当您尝试键入以下内容时,您会得到什么:
javap -classpath c:/reader/example.jar com.example.reader.SimpleReader
Run Code Online (Sandbox Code Playgroud)你说你使用的是7.0.4版本 - 这可能就是问题所在.早期版本的MATLAB使用旧版本的Java JRE:
MATLAB仅在我们随MATLAB提供的JVM上得到完全支持.例如:
适用于MATLAB 6.5.1的JVM 1.3.1(R13SP1)
适用于MATLAB 7.0.1的JVM 1.4.2(R14SP1)
MATLAB 7.0.4(R14SP2)及更高版本直到MATLAB 7.4(R2007a)使用JVM 1.5和MATLAB 7.5(R2007b),后来使用JVM 1.6.在不同版本的JVM下,有些组件可能无法正常工作.
此时你基本上有三个选择.
(如果可能) - 仅使用与Java 5兼容的JAR文件.在这种情况下,由于您要创建自己的库,因此需要使用该-target 1.5
选项.(target="1.5"
如果你正在使用ant <javac>
任务)这通常不是一个大问题,因为1.6是从1.5开始的一种渐进式改进 - 尽管如果你使用的是少数Java 6类ArrayDeque
,或者外部库那么依靠1.6,你运气不好.
将MATLAB升级到在Java 6(R2007b或更高版本)上运行的版本.
当您将Java开发环境升级到Java 7或Java 8时,请记住此问题.