java jni 调用 java.lang.UnsatisfiedLinkError

在window中jni调用报错


Exception in thread "main" java.lang.UnsatisfiedLinkError: TestJni.sayHello(Ljava/lang/String;)Ljava/lang/String;
	at TestJni.sayHello(Native Method)
	at TestJni.main(TestJni.java:12)


大概意思是找不到方法.网上给了几种解决方法

第1种方法: 
gcc -Wl,--kill-at -shared -o jnihello.dll Native.c 
这种方法生成不带@的函数声明 

第2种方法: 
gcc -Wl,--add-stdcall-alias -shared -o jnihello22.dll Native.c 
这种方法会生成2个函数声明,一个是带@的 一个是不带@的。 

第3种方法: 
在你的本地方法的头文件中中的函数前面加上下划线,比如以前是 
JNIEXPORT void JNICALL Java_TestNative_Hello (JNIEnv * , jobject ); 
现在改成 
JNIEXPORT void  JNICALL  _Java_TestNative_Hello (JNIEnv * , jobject ); 
同时你的实现的cpp文件或者c文件里的函数头也要一致 前面有下划线。

-----------------------------------------------------------------------------------------

在cdt编译的时候默认指定了参数,这时候我们需要添加一些编译的参数,其中方法1和方法二需要我们

添加编译参数,如何添加切图如下


--kill-at 是我们添加的编译参数,最后编译日志

**** Rebuild of configuration Release for project test_jni_c++ ****

**** Internal Builder is used for build               ****
g++ -ID:\MinGW\lib\gcc\mingw32\4.6.2\include\c++ -IC:\Program Files\Java\jdk1.6.0_21\include -IC:\Program Files\Java\jdk1.6.0_21\include\win32 -O3 -Wall -c -fmessage-length=0 -osrc\JNItest.o ..\src\JNItest.cpp
g++ -Xlinker --kill-at -shared -olibtest_jni_c++.dll src\JNItest.o
Build complete for project test_jni_c++
Time consumed: 349  ms.


最后再说明一点,在java加载动态链接库的时候可能找不到文件地址(我的链接库放在lib目录下),需要在java编译的时候添加上编译参数切图:

over.





转载于:https://my.oschina.net/zorigin/blog/133705

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值