转载

四川科技馆 智能控制 物联网 AI 数据采集 智能控制(JNative、skycto JEEditor)

1.分清楚System.load与System.loadLibrary

<pre>

System.load

// System.load 参数必须为库文件的绝对路径,可以是任意路径,例如:

 System.load("C:/Documents and Settings/TestJNI.dll"); //Windows
 System.load("/usr/lib/TestJNI.so"); //Linux

System.loadLibrary

//System.loadLibrary 参数为库文件名,不包含库文件的扩展名。

 System.loadLibrary ("TestJNI"); //加载Windows下的TestJNI.dll本地库
 System.loadLibrary ("TestJNI"); //加载Linux下的libTestJNI.so本地库
 //注意:TestJNI.dll 或 libTestJNI.so 必须是在JVM属性java.library.path所指向的路径中。

</pre>

2.以上为原理(都不好使!!!)

<pre>

GlobalFunction.getSingleton().loadJNILibrary("zlprint");

loadJNILibrary

这个炸天方法是自动从classpath或者jar包中寻找 zlprint.dll 或者 zlprint.so(具体根据OS系统平台决定)

重复加载相同的dll会报错哦!

loadJNILibrary要区分x86和x64,假设你有相同的两个zlprint.dll,请在前面加上目录限定名称,比如:windows-x86_64/zlprint

</pre>

3.JavaCPP的坑

执行这些命令行的时候需要在Visual Studio 20XX的命令提示符下运行

$ javac -cp javacpp.jar NativeLibrary.java

$ java -jar javacpp.jar NativeLibrary

$ java -cp javacpp.jar NativeLibrary

因为最后一行命令会调用VS的运行环境编译器cl.exe,不是在Visual Studio x64 Win64 Command Prompt (2010)命令中执行就找不到这玩意儿!

如果你写的xxx.java文件中包含了package信息,编译的时候应该把xxx.class文件放在package目录下才能够编译(这是java常识)

JavaCPP中的注解annotation都是针对c++文件生成而言,跟java文件本身没有任何毛关系!

作用是为了配置生成的cpp代码而存在

@Platform(include="PrintLib.h",link ="D:/javacpp-bin/zlprint")

头文件包含可以这样:include={"PrintLib.h","string.h"}

更多控制系统学习资料

4.数据采集与智能控制

四川科技馆 智能控制 物联网 AI 数据采集 智能控制(JNative、skycto JEEditor)

四川科技馆 智能控制 物联网 AI 数据采集 智能控制(JNative、skycto JEEditor)

四川科技馆 智能控制 物联网 AI 数据采集 智能控制(JNative、skycto JEEditor)

原文  https://segmentfault.com/a/1190000020389045
正文到此结束
Loading...