导航:首页 > 编程语言 > javalinuxso

javalinuxso

发布时间:2022-09-04 22:23:05

A. linuxjava怎样调用普通的so

用JNI实现
实例:

创建HelloWorld.java
class HelloWorld
{
private native void print();
public staticvoid main(String[] args)
{
new HelloWorld().print();
}

static
{
System.loadLibrary("HelloWorld");
}
}
注意print方法的声明,关键字native表明该方法是一个原生代码实现的。另外注意static代码段的System.loadLibrary调用,这段代码表示在程序加载的时候,自动加载libHelloWorld.so库。
编译HelloWorld.java
命令行中运行如下命令:
javac HelloWorld.java
在当前文件夹编译生成HelloWorld.class。
生成HelloWorld.h
在命令行中运行如下命令:
javah -jni HelloWorld
在当前文件夹中会生成HelloWorld.h。打开HelloWorld.h将会发现如下代码:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
该文件中包含了一个函数Java_HelloWorld_print的声明。这里面包含两个参数,非常重要,后面讲实现的时候会讲到。
实现HelloWorld.c
创建HelloWorld.c文件输入如下的代码:
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL

Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
}
注意必须要包含jni.h头文件,该文件中定义了JNI用到的各种类型,宏定义等。
另外需要注意Java_HelloWorld_print的两个参数,本例比较简单,不需要用到这两个参数。但是这两个参数在JNI中非常重要。
env代表java虚拟机环境,Java传过来的参数和c有很大的不同,需要调用JVM提供的接口来转换成C类型的,就是通过调用env方法来完成转换的。
obj代表调用的对象,相当于c++的this。当c函数需要改变调用对象成员变量时,可以通过操作这个对象来完成。
编译生成libHelloWorld.so
在Linux下执行如下命令来完成编译工作:
cc -I/usr/lib/jvm/java-6-sun/include/linux/
-I/usr/lib/jvm/java-6-sun/include/
-fPIC -shared -o libHelloWorld.so HelloWorld.c
在当前目录生成libHelloWorld.so。注意一定需要包含Java的include目录(请根据自己系统环境设定),因为Helloworld.c中包含了jni.h。
另外一个值得注意的是在HelloWorld.java中我们LoadLibrary方法加载的是
“HelloWorld”,可我们生成的Library却是libHelloWorld。这是Linux的链接规定的,一个库的必须要是:lib+库
名+.so。链接的时候只需要提供库名就可以了。
运行Java程序HelloWorld
大功告成最后一步,验证前面的成果的时刻到了:
java HelloWorld
如果你这步发生问题,如果这步你收到java.lang.UnsatisfiedLinkError异常,可以通过如下方式指明共享库的路径:
java -Djava.library.path='.' HelloWorld
当然还有其他的方式可以指明路径请参考《在Linux平台下使用JNI》。
我们可以看到久违的“Hello world!”输出了。

B. 关于Linux中的so文件

你知道windows下的dll文件吗???
其实和linux下的so文件是一回事,,so文件也是编译好了的二进制的链接库文件,,,
一般来说都是c或c++编译出来的,,java的话通常是用的字节码,也就是class文件。。
你自己写一个 helloworld的c程序,然后在命令行下用编译器编译gcc -c helloworld.c -o hello.o这样编译出来的结果就是那样的东西了。。这样的文件是不能直接运行的。。

C. linux上使用java加载so动态库报错

1、编写 java 类,先上代码

[html] view plain
package com.hongquan.jni;

public class HelloJNI {

// 声明 so 库中的方法
public native static String sayHi(String name);

// 载入 so 动态链接库
static {
System.load("/home/hongquan/main.so");
}

// java 类入口函数

D. java jnative 调用 dll,在Linux环境下用的是.so文件,请问.so文件应该放在什么路径下 高分!急!

在/usr/lib下面就可以

一般就几个目录 /lib /usr/lib /usr/local/lib


在/etc/env.d/目录下有文件定义这些搜索库的路径

比如 00basic 中就有这么一句

LDPATH='/lib64:/usr/lib64:/usr/local/lib64:/lib32:/usr/lib32:/usr/local/lib32:/lib:/usr/lib:/usr/local/lib'

当然我用的版本是gentoo,是这样,大多数应该一样吧


你也可以放到自己的文件夹里,然后把文件夹名加到env.d下的文件里去

E. java jni 怎么在windows环境中编译成linux下的so文件

可以直接在android工程下使用,因为android就是linux内核。

F. linux上部署java项目,调用sh脚本启动java Main方法程序,找不到对应的so文件!

如果未设置JAVA_HOME环境变量,需要手动指定
#JDK所在路径
JAVA_HOME=/root/JDK/jdk1.6.0_24
RUNNING_USER、APP_HOME、APP_MAINCLASS、CLASSPATH根据自己项目的情况修改即可。
如果在windows下编辑上传到linux,注意用dos2unix命令转换文件格式,不然会报错。

G. linux so是什么 文件

.so文件代表Linux的共享函数库文件,程序运行时可能会使用到里面的函数代码。当一个程序需要.so共享函数库文件时,系统自动会把它加载到内存中使用。相当于Windows系统里面的dll动态链接库文件。

H. 在Linux上部署Java web项目,直接在main函数中调用so文件成功,但是部署到to

是路径的问题,之前你的没有webroot路径,系统找不到你的工程,所以会报404错误,404错误就是因为找不到文件,系统默认先找webroot 然后再找你的工程,你现在把webroot也传上去了,当然就能够找到你的工程了

I. windows 下使用eclipse java程序调用在linux下生成的.so文件

不能。windows只能调用windows的dll文件。如果一定要调用so,只好在linux下面测试哦。
或者在windows下面写一个与so对等的dll。

J. linux java 调用C++方法 编译动态库文件.so时找不到jni.h

用 sudo find / -name jni.h -print
命令,就会打出路径

阅读全文

与javalinuxso相关的资料

热点内容
怎么查订阅了哪些app 浏览:6
下载站用的什么服务器 浏览:788
原神的服务器如何分辨 浏览:886
每天pdf 浏览:518
安卓手机怎么设置关闭屏幕时间 浏览:815
云服务器有宝塔面板吗 浏览:518
中行app如何看基点 浏览:204
怎么限制网络连接的人数安卓 浏览:177
怎么把app数据清理 浏览:834
什么APP既 浏览:227
两台阿里云服务器怎么并行 浏览:633
触控笔如何关闭app 浏览:123
linux永久关闭防火墙命令 浏览:401
spsspdf下载 浏览:689
奥维坐标怎么加密 浏览:720
常用的负载均衡算法 浏览:405
java万年历源码 浏览:881
如何将安卓手机搬家到苹果手机 浏览:440
怎么改wifi加密方式 浏览:415
pic单片机串口 浏览:256