當前位置:首頁 » 操作系統 » linuxjavaso

linuxjavaso

發布時間: 2023-08-06 04:57:59

linux環境java如何調用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!」輸出了。

Ⅱ JAVA中用JNI調用了在WIN32下編譯的DLL,如果在LINUX下執行這個JAVA程序,是否還可以繼續調用的DLL。

直接是不行的! linux裡面沒有dll。
不過看你的需求應該是java調用了其他程序別寫的功能,在linux裡面肯定可以!Linux也有動態鏈接庫的概念,不過叫Share Object ,你編譯一個.so的文件,然後還是使用JNI調用。
參考:
編譯so:http://www.cnblogs.com/ardar/articles/357321.html
java調用:http://..com/question/488673981.html

Ⅲ 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 類入口函數

Ⅳ 如何在linux中刪除JAVA

卸載過程包括以下步驟:
Java 插件卸載
Java 卸載
RPM 卸載
解壓卸載
Java 插件卸載:Mozilla 瀏覽器
如果准備重新安裝 Java,則不必卸載 Java 插件。創建新的符號鏈接時,只需使用 ln 命令的 -f 選項。
示例: ln -f /usr/lib/mozilla/plugins/libnpjp2.so

如果准備從 Linux 盒中完全刪除 Java,請參閱下面介紹的符號鏈接刪除過程。
打開終端窗口
以超級用戶身份登錄
鍵入: rm /usr/lib/mozilla/plugins/libnpjp2.so
將提示刪除符號鏈接:
rm: /usr/lib/mozilla/plugins/libnpjp2.so ?
鍵入:Y
Java 卸載
有兩種方法卸載 Java。請使用在安裝 Java 時所用的方法。
例如,如果以前使用 RPM 安裝 Java,則使用 RPM 卸載方法。

RPM 卸載
註:如果 Linux 盒中具有 RPM,則應首先確定 Java 是否是使用 RPM 安裝的。如果 Java 不是使用 RPM 安裝的,則請跳過本節內容。

打開終端窗口
以超級用戶身份登錄
鍵入以下命令,嘗試查找 JRE 軟體包: rpm -qa
如果 RPM 報告一個類似於 jre-<version>-fcs 的軟體包,則說明 Java 是使用 RPM 安裝的。

註:通常,不必使用 RPM 卸載 Java,因為 RPM 可以在安裝新版本時自動卸載舊版本的 Java!除非准備永久刪除 Java,否則請跳過本節內容。
要卸載 Java,請鍵入: rpm -e jre-<version>-fcs

自解壓文件卸載

確定 Java 是否安裝在某些文件夾中。常用位置包括 /usr/java/jre_<version> 或/opt/jre_nb/jre_<version>/bin/java/
如果找到了安裝 Java 的文件夾,可以刪除此文件夾。
警告:刪除文件夾之前,應確保 Java 以前不是使用 RPM 安裝的。
鍵入: rm -r jre<version>
例如: rm -r jre1.7.0

Ⅳ linux用java socket與c的socket通信亂碼問題

應該就是字元集問題。
首先要確定Linux返回的數據中,採用了那種編碼方式,如:GBK。
對應的,在Java一端,將字元串信息轉換成byte數組並寫入Socket,讀出的數據也轉換成字元串,
如:
String s = "中文" ;
sockoutputstream.write (s.getBytes ("GBK")) ;

讀出來時候,
byte [] buf = sockinputStream.read ()

String s = new String (buf, "GBK") ;

這樣就可以了。

熱點內容
linux命令清理 發布:2025-03-12 23:17:15 瀏覽:5
手機文件夾趣味名字6個 發布:2025-03-12 23:17:12 瀏覽:497
解釋程序和編譯程序 發布:2025-03-12 23:15:47 瀏覽:571
色豬視頻為什麼沒有伺服器 發布:2025-03-12 23:15:46 瀏覽:123
如龍極2低配置怎麼調 發布:2025-03-12 23:14:06 瀏覽:374
androidopencamera 發布:2025-03-12 23:05:27 瀏覽:816
雲購網源碼 發布:2025-03-12 23:00:29 瀏覽:618
騰訊雲伺服器上的電腦打不開 發布:2025-03-12 22:55:29 瀏覽:942
安卓系統怎麼退出遊戲 發布:2025-03-12 22:42:37 瀏覽:665
高強度加密大師忘記密碼 發布:2025-03-12 22:37:11 瀏覽:177