急求解决java.lang.annotationunsatisfiedlinkerror sigar

89930人阅读
Java&开源(22)
&先从一个经典例子说起,Java如何调用本地接口。
步骤如下:
1.创建HelloWorld.java
class HelloWorld
System.loadLibrary(&HelloWorld&);
public native void myprint();
public static void main(String[] args)
new HelloWorld().myprint();
2.编译生成Class文件HelloWorld
&javac HelloWorld.java
3.生成文件头HelloWorld.h
&javah -jni HelloWorld
4.C语言编写本地方法HelloWorld.c
#include &HelloWorld.h&
JNIEXPORT void JNICALL
Java_HelloWorld_myprint(JNIEnv *env,jobject obj){
printf(&Hello World !\n&);
5.编译本地C方法生成类库dll文件或者so文件
&gcc -Wl,--add-stdcall-alias -shared -Ic:\java\jdk1.6\include -Ic:\java\jdk1.6\include\win32 -o HelloWorld.dll HelloWorld.c或者:
&cl -Ic:\Java\jdk1.6\include -Ic:\Java\jdk1.6\include\win32 -LD HelloWorld.c -FeHelloWorld.dll如果没有c的编译环境需要安装编译环境或者gcc 参数:-I接目录位置,中间无需空格★关键 dll文件需要存放到 jdk的bin目录或者system32下面
6.测试HelloWorld
&java HelloWorld
Hello World !
&&&&&&&& 这个经典小例子一般在命令行下面没有什么问题,容易出错的地方就是dll 存放位置不对。运行的时候无法加载dll。
常见错误:
&&&&&&&1.&java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path
&&&&&&&2. Exception in thread &main& java.lang.UnsatisfiedLinkError: xxx.xxx.HelloWorld.myprint()V
&&&&&& 网上总结很多。错误1,主要是没有办法path路径中加载。错误2主要是没有myprint方法,类库加载没有问题。
&&&&&&&排除dll本身问题(网上不少人遇到),dll没有问题,加载路径也没有问题,不能连接到方法。这个在命令行的时候不容易发现问题,移到生产环境中容易出现,可能你已经猜到了,HelloWorld.java包路径,类的包路径要和生成头文件类包路径一致。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:364378次
积分:3717
积分:3717
排名:第8619名
原创:85篇
评论:44条
(3)(1)(4)(4)(4)(4)(5)(4)(5)(4)(6)(2)(1)(1)(1)(9)(8)(1)(1)(5)(9)(1)(2)(5)(4)sigar 使用报错问题解决(java.lang.UnsatisfiedLinkError: gather)
将sigar.jar&
sigar-amd64-winnt.dll
sigar-x86-winnt.dll&
sigar-x86-winnt.lib
放到tomcat 的lib下;
1.在代码中执行String str=System.getProperty(&java.library.path&);
2.查看str中第一个;前的位置(即你的java jdk的bin目录下)
3.将sigar-x86-winnt.dll拷到这个目录下
4.重新执行代码(如果是服务器的话,记得重新启动在执行)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:353次
排名:千里之外
(1)(1)(3)(1)解决方案:
& & 在项目目录中的build.gradle中添加以下代码:
    ndk{
moduleName &TestHello&//so文件名
ldLibs &log&, &z&, &m&//
abiFilters &armeabi&, &armeabi-v7a&, &x86&//cup类型
//删除这句代码
sourceSets {
jniLibs.srcDirs = ['libs']
}注意:这种情况基本上就是abiFilters &armeabi&, &armeabi-v7a&, &x86&这句代码导致的,把这句话删除就好了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
排名:千里之外2859人阅读
遇到的问题就是修改了包的路径结果导致程序调用不了。
分类:&&26856人阅读&&&
&先从一个经典例子说起,Java如何调用本地接口。
步骤如下:
1.创建HelloWorld.java
2.编译生成Class文件HelloWorld
3.生成文件头HelloWorld.h
4.C语言编写本地方法HelloWorld.c
5.编译本地C方法生成类库dll文件或者so文件
6.测试HelloWorld
&&&&&&&& 这个经典小例子一般在命令行下面没有什么问题,容易出错的地方就是dll 存放位置不对。运行的时候无法加载dll。
常见错误:
&&&&&&&1.&java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path
&&&&&&&2. Exception in thread &main& java.lang.UnsatisfiedLinkError: xxx.xxx.HelloWorld.myprint()V
&&&&&& 网上总结很多。错误1,主要是没有办法path路径中加载。错误2主要是没有myprint方法,类库加载没有问题。
&&&&&&&排除dll本身问题(网上不少人遇到),dll没有问题,加载路径也没有问题,不能连接到方法。这个在命令行的时候不容易发现问题,移到生产环境中容易出现,可能你已经猜到了,HelloWorld.java包路径,类的包路径要和生成头文件类包路径一致。
准备好了么?&跳吧&&&&&&&&&&&&&!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:205189次
积分:2608
积分:2608
排名:第13967名
原创:50篇
转载:55篇
评论:24条
(1)(1)(1)(1)(1)(2)(4)(1)(3)(1)(2)(3)(1)(1)(2)(1)(1)(1)(1)(4)(3)(3)(2)(1)(3)(1)(2)(2)(1)(5)(2)(4)(5)(6)(1)(1)(1)(2)(2)(3)(1)(1)(1)(1)(3)(3)(1)(2)(2)(2)(3)(2)

我要回帖

更多关于 java.lang.string 的文章

 

随机推荐