導航:首頁 > 文件教程 > javaso文件

javaso文件

發布時間:2022-12-27 12:48:38

① so格式文件是什麼文件

SO文件格式即ELF文件格式,它是linux下可執行文件,共享庫文件和目標文件的統一格式。

根據看待文件的不同方式,ELF文件可以分為鏈接視圖和裝載視圖。鏈接視圖是鏈接器從鏈接的角度看待靜態的ELF文件。

從鏈接視圖看ELF文件,ELF文件由多個section組成,不同的section擁有不同的名稱,許可權。而裝載視圖是操作系統從載入ELF文件到內存的角度看待動態的ELF文件。

從裝載視圖看ELF文件,ELF文件由多個segment,每一個segment都擁有不同的許可權,名稱。實際上,一個segment是對多個具有相同許可權的section的集合。

(1)javaso文件擴展閱讀

由於Android操作系統的底層基於Linux系統,所以SO文件可以運行在Android平台上。Android系統也同樣開放了C/C++介面供開發者開發Native程序

由於基於虛擬機的編程語言JAVA更容易被人反編譯,因此越來越多的應用將其中的核心代碼以C/C++為編程語言,並且以SO文件的形式供上層JAVA代碼調用,以保證安全性。

而ELF頭表記錄了ELF文件的基本信息,包括魔數,目標文件類型(可執行文件,共享庫文件或者目標文件),文件的目標體系結構,程序入口地址(共享庫文件為此值為0),然後是section表大小和數目,程序頭表的大小和數目,分別對應的是鏈接視圖和裝載視圖。



② 如何把JAVA工程 編譯成.SO文件

1,寫一個java文件,聲明一個native 方法,例如public native void test(); 2,把它編譯成class文件 3,使用javah 這個class來生成cpp的頭文件 4,實現頭文件裡面那些函數 4,用ndk編譯生成動態庫 其中1,想生成幾個就寫幾個native方法。

③ 什麼是SO文件

SO文件是Linux下共享庫文件,它的文件格式被稱為ELF文件格式。由於Android操作系統的底層基於Linux系統,所以SO文件可以運行在Android平台上。

Android系統也同樣開放了C/C++介面供開發者開發Native程序。由於基於虛擬機的編程語言JAVA更容易被人反編譯,因此越來越多的應用將其中的核心代碼以C/C++為編程語言,並且以SO文件的形式供上層JAVA代碼調用,以保證安全性。

(3)javaso文件擴展閱讀:

so文件使用方法:

(1)動態庫的編譯。這里有一個頭文件:so_test.h,三個.c文件:test_a.c、test_b.c、test_c.c,我們將這幾個文件編譯成一個動態庫:libtest.so。

命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so不用該標志外部程序無法連接。相當於一個可執行文件。

(2)動態庫的鏈接這里有個程序源文件 test.c 與動態庫 libtest.so 鏈接生成執行文件 test:命令:$ gcc test.c -L. -ltest -o test命令:$ ldd test執行test,可以看到它是如何調用動態庫中的函數的。

參考資料來源:網路—SO(軟體編程)

④ .so文件怎麼打開啊急急急

工具/材料來:記事本,so文件。

1、首源先在桌面上,選中「so文件」圖標。

⑤ Java 在eclipse中,web項目如何載入.so文件的詳細步驟

引入jna.jar包。 然後寫一個介面類繼承Library來和.so(linux平台)或.dll(windows平台)文件交互。介面中對應的方法為so中的方法,大小寫都需要完全一致,同時參數類型也需要注意,jna和so中的參數類型的對應轉換。

以下是代碼是大概例子,你可以看一下,是有參數的對應格式的。其中,Native.loadLibrary為載入鏈接庫文件。

{


InfoINFO=Info.getInstance();

LibVlcINSTANCE=(LibVlc)Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class);

LibVlcSYNC_INSTANCE=(LibVlc)Native.synchronizedLibrary(INSTANCE);

Stringlibvlc_errmsg();

voidlibvlc_clearerr();


libvlc_instance_tlibvlc_new(intargc,String[]argv);
}

⑥ java 調用so文件

在命令行中運行如下命令:
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!」輸出了。

⑦ Xamarin 怎麼調用java的 so文件

1 、編寫java代碼
package net.lu;
public class HelloJNI {
static {
System.loadLibrary("HelloJNI");
}
public native static int get();
public native static void set(int i);
public static void main(String[] args) {
HelloJNI test = new HelloJNI();
test.set(10);
System.out.println(test.get());
}
}
2、在HelloJNI.java文件所在目錄下編譯.java文件。

javac HelloJNI.java

3、生成.h頭文件,需要注意的是,要在src目錄層生成文件
... src] # javah -jni net.lu.HelloJNI
4、編寫.c 文件
#include "net_wangliping_HelloJNI.h"
int i = 0;
JNIEXPORT jint JNICALL Java_net_wangliping_HelloJNI_get(JNIEnv *env, jclass jc)
{
return i;
}
JNIEXPORT void JNICALL Java_net_wangliping_HelloJNI_set(JNIEnv *env, jclass jc, jint j)
{
i = 2*j;
}
5、生成.so文件
[root@turbolinux src]# gcc -I/usr/java/jdk1.5.0_13/include/linux -I/usr/java/jdk1.5.0_13/include -fPIC -shared -o libHelloJNI.so HelloJNI.c
6、eclipse 調用SO文件

最簡單的方式,調用 System.out.println(System.getProperty("java.library.path"));
得到/usr/java/jdk1.5.0_13/jre/lib/i386,將SO文件放在該目錄下
運行java程序,輸出了由C語言函數計算出的結果

⑧ 什麼是SO文件

so文件是Linux下的程序函數庫,即編譯好的可以供其他程序使用的代碼和數據。專

安卓手機如何打開.so文件

01
安卓手機打開.so文件需要下載Native Libs Monitor這個app,這個應用可以幫助我們理解手機上安裝的APK用到了哪些.so文件,以及.so文件來源於哪些函數庫或者框架。我們也可以自己對app反編譯來獲取這些信息。

除了系統方面的原因,Android開發者還要知道以下幾點:
so機制讓開發者最大化利用已有的C和C++代碼,達到重用的效果,利用軟體世界積累了幾十年的優秀代碼。
so是二進制,沒有解釋編譯的開消,用so實現的功能比純java實現的功能要快。
so內存分配不受Dalivik/ART的單個應用限制,減少OOM。
閱讀全文

與javaso文件相關的資料

熱點內容
dos看圖工具 瀏覽:15
微信直接加為好友 瀏覽:467
可以用微信傳送的文件app 瀏覽:294
pdf文件解析亂碼 瀏覽:479
光照無關圖代碼 瀏覽:688
Linux讀寫文件前八位 瀏覽:597
word如何繪制餅狀圖 瀏覽:172
w7系統搜索文件夾 瀏覽:618
java線程變數 瀏覽:854
蘋果電腦word是只讀文件 瀏覽:691
ps5國行備份文件大小 瀏覽:754
linux恢復刪除文件命令 瀏覽:805
win10家庭版打不開qq文件 瀏覽:794
女生來例假有哪個app比較好 瀏覽:66
調用後台介面為什麼不顯示數據 瀏覽:363
js判斷重復 瀏覽:422
聯通如何切換到網路電視 瀏覽:191
學編程的優勢哪裡靠譜 瀏覽:939
溝通文件 瀏覽:267
水準測量平差程序 瀏覽:78

友情鏈接