大家好,我是一个新人,目前遇到一个问题,搞了很久一直没有进展,希望高手指点。
这是项目中遇到的一个实际问题,我写了几个测试程序来描述这个问题:
1.首先我写了一个mysyscall.c文件,里面是一个与系统调用gethostname同样声明的函数,但是具体实现不一样;
2.然后写了一个Jload.java函数,里面有一个native 的方法call
3.通过JNI生成Jload.h文件,使用Jload.c去实现其中的方法Java_Jload_call,这个方法实现很简单,就是调用我上面写的gethostname方法。
4.将mysyscall.c,Jload.c一起生成一个动态库供java调用(gcc -shared -fpic -Wall -o libtest.so mysyscall.c Jload.c)
最后,运行java程序,但问题出现了,java程序并没有调用我自己写的gethostname,而是调到了系统调用,请问有什么方法可以解决吗 ?
非常感谢!!!
这是项目中遇到的一个实际问题,我写了几个测试程序来描述这个问题:
1.首先我写了一个mysyscall.c文件,里面是一个与系统调用gethostname同样声明的函数,但是具体实现不一样;
2.然后写了一个Jload.java函数,里面有一个native 的方法call
3.通过JNI生成Jload.h文件,使用Jload.c去实现其中的方法Java_Jload_call,这个方法实现很简单,就是调用我上面写的gethostname方法。
4.将mysyscall.c,Jload.c一起生成一个动态库供java调用(gcc -shared -fpic -Wall -o libtest.so mysyscall.c Jload.c)
最后,运行java程序,但问题出现了,java程序并没有调用我自己写的gethostname,而是调到了系统调用,请问有什么方法可以解决吗 ?
非常感谢!!!
2指定路径
2.指定路径 :可以说具体点吗?你指在java文件中?我是用的绝对路径加载啊System.load("...../libtest.so"),使用System.loadlibrary("test")也是一样的
感谢楼上回复
System.load("xxx/libtest")就好了。
如果要动态设置xxx路径就自己设置-Djava.library.path=xxx就好了。
System.load("xxx/test")就好了。
如果要动态设置xxx路径就自己设置-Djava.library.path=xxx就好了。
应该是System.load("xxx/test")
在linux下面会自动加上lib的,windows下面就不会了,windows下面就必须是test.dll才行。
System.load("xxx/libtest")就好了。
如果要动态设置xxx路径就自己设置-Djava.library.path=xxx就好了。