導航:首頁 > 編程語言 > linuxjava調試

linuxjava調試

發布時間:2022-06-16 15:52:41

『壹』 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!」輸出了。

『貳』 如何在linux環境下調試JAVA程序使用訪

從命令行或者 shell 提示符執行應用程序的一個常用方法是使用 ./ 命令。如果您在 Linux 中使用句號 (.) 和正斜杠 (/),就意味著告訴環境您想要以可執行文件運行該文件。例如,運行一個名為 myapp 的可執行文件,您可以使用 ./myapp 命令。

『叄』 如何在Linux環境下調試Java程序使用訪問Timesten

一、新建本地java工程
file->new->java project

二、添加jar包和配置文件
1、添加JAR包
右擊Propertie在彈出的快捷菜單中選擇Java Build Path對話框,在該對話框中單擊Libraries選項卡,在該選項卡下單擊
Add External JARs按鈕,定位到$HBASE/lib目錄下,並選取如下JAR包。
hadoop-core-1.0.0.jar
commons-loggings-version.jar
commons-cli-version.jar
commons-lang-version.jar
commons-configuration-version.jar
hbase-0.94.1.jar
zookeeper-3.4.3.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
log4j-1.2.16.jar
protobuf-java-2.4.1.jar
2、添加hbase-site.xml配置文件
在工程根目錄下創建conf文件夾,將$HBASE_HOME/conf/目錄中的hbase-site.xml文件復制到該文件夾中。通過右鍵
選擇Propertie->Java Build Path->Libraries->Add Class Folder。

3、windows下開發HBase應用程序,HBase部署在linux環境中,在運行調試時可能會出現無法找到主機,類似異常信息如下:java.net.UnknownHostException: unknown host: master
解決辦法如下:在C:\WINDOWS\system32\drivers\etc\hosts文件中添加如下信息
192.168.2.34 master

『肆』 如何在linux上自動運行java程序

java 你的文件.class
就可以運行你的程序了,你可以把它加到腳本中

『伍』 java在linux環境下的配置

純java開發的軟體在linux下面也可以應用自如。那麼首先就需要配置好linux下的java環境,具體說來,就是配置jdk環境變數。
介紹在linux下配置jdk環境變數的幾種常用方法。

首先在linux下安裝jdk,如果出現提示許可權不夠(且root下也提示許可權不夠),可用#ls -l filename命令查看一下,如果顯示類似如:

則表示任何用戶都沒有可執行許可權(即使是root用戶)。

解決方法:

#chmod a+x filename

這樣,安裝好後,就可以接下來進行環境變數的配置了。這里給出三種可選方法:

一、修改/etc/profile文件

當本機僅僅作為開發使用時推薦使用這種方法,因為此種配置時所有用戶的shell都有權使用這些環境變數,可能會給系統帶來安全性問題。

用文本編輯器打開/etc/profile,在profile文件末尾加入:

JAVA_HOME=/usr/share/jdk1.5.0_05
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

重新登錄即可。

二、修改.bashrc文件

這種方法更為安全,它可以把使用這些環境變數的許可權控制到用戶級別,如果需要給某個用戶許可權使用這些環境變數,只需要修改其個人用戶主目錄下的.bashrc文件就可以了。

用文本編輯器打開用戶目錄下的.bashrc文件,在.bashrc文件末尾加入:

set JAVA_HOME=/usr/share/jdk1.5.0_05
export JAVA_HOME
set PATH=$JAVA_HOME/bin:$PATH
export PATH
set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH

重新登錄。

三、直接在shell下設置變數

不推薦使用這種方法,因為換個shell,該設置就無效了。這種方法僅僅是臨時使用,以後要使用的時候又要重新設置,比較麻煩。

只需在shell終端執行下列命令:

export JAVA_HOME=/usr/share/jdk1.5.0_05
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

注意:

1.要將 /usr/share/jdk1.5.0_05jdk 改為jdk安裝目錄
2. linux下用冒號」:」來分隔路徑
3. $PATH / $CLASSPATH / $JAVA_HOME 是用來引用原來的環境變數的值在設置環境變數時特別要注意不能把原來的值給覆蓋掉了。
4. CLASSPATH中當前目錄」.」不能丟掉。
5. export是把這三個變數導出為全局變數。
6. 大小寫必須嚴格區分。
(引用資料,僅作交流)

『陸』 如何在Linux環境下調試Java程序使用訪問Timesten

首先要安裝JDK,再要配製環境變數,以下以Bash shell為例 在終端下用VI打開配置文件,方法:vi .bash_profile;按i鍵進入到插入模式,不要改變原文件,添加$JAVA_HOME=JDK 的安裝路徑如/opt/jdk

『柒』 如何在linux下調試Java system.loadlibrary錯誤

1. 我認為這個問題是與調用System.loadLibrary(字元串)LD_LIBRARY_PATH。使用LoadLibrary(「富」)將看著你的java.library.path的libfoo.so。如果發現任何libfoo.so你會得到這個錯誤。 現在,如果你只設置了LD_LIBRARY_PATH,你想要的原始符號將自動被拾起的連接器,所以你不需要設置-Djava.library.path。 在我的經驗與swig在GDAL項目,這個錯誤其實是無害的,因為LD_LIBRARY_PATH設置,這將正常工作。 我會使用-Djava.library.path和調用調用LoadLibrary explitly CodeGo.net,原因是,如果你決定要使用的webstart部署你的應用程序,你將需要顯式地調用LoadLibrary來讓你的本地庫拾起。 當月食我遵循達夫給您編輯在構建路徑Libraries選項卡下的jar本地庫的說明。只需再次,這只是設置在幕後java.library.path。

2. 你可以試試-Djava.library.path=actual.so行吧? 在Windows上,我也有類似的問題,第三方庫,JNI封裝的DLL,它的DLL。我的項目已經在lib目錄下的DLL,這樣我添加到庫的路徑(如:PATH=%PATH%;./lib變,一切都開始工作。

3. 據我知道的Eclipse沒有關系'的LD_LIBRARY_PATH。 要樹立正確的本地庫路徑的最簡單的方法就是去 項目屬性-> Java構建路徑->庫 然後展開或者JRE的系統庫條目或(如果有的話)的 jar文件的本地庫, 選擇「本地庫位置」,然後單擊「編輯...」並選擇你的庫。實際上它並設置-Djava.library.path變數,以便你必須包括這行,如果你開始從外面蝕你的程序的文件夾。

4. 這可能是因為你只需要找到運行配置對話框中合適的地方放-Djava.library.path=...選項。隨口說說我想你想-D在選項卡上的「VM定義,而如果要定義LD_LIBRARY_PATH就是那張在標簽上。Eclipse的讓你把東西在那裡他們贏得'你覺得什麼反正我庫這樣的地方以前,如果我有機會,我會仰望我做了什麼,在這里編輯我的答案。 另一件事,試圖與LD_DEBUG玩。您可以設置變數LD_DEBUG的事情(嘗試所有),然後Linux載入程序會泄露的各種關於什麼一個應用程序試圖載入,它在尋找的東西,等等。當然,這種預先假定您啟動Eclipse從行,所以你可以同時設置ENV增值經銷商,看到了loader的診斷,但就系統而言,當你從Eclipse中運行你的應用,你的應用程序僅僅是Eclipse是干什麼的,所以任何的庫裝載行為cocoa見以這種方式。

5. 是否有你的兩個庫依賴於任何其他庫?如果是這樣,你需要確保他們也可以訪問到JVM。 請注意,手動設置「-Djava.library.path」似乎清除預設的庫路徑。 所以,用下面的代碼:public class LibTest {
public static void main(String[] args) {
String property = System.getProperty("java.library.path");
StringTokenizer parser = new StringTokenizer(property, ":");
while (parser.hasMoreTokens()) {
System.err.println(parser.nextToken());
}
}
}

從eclipse與Java 1.6.0_14輸出啟動:/opt/java/jre/lib/i386/client
/opt/java/jre/lib/i386
/opt/java/jre/../lib/i386
/opt/java/jre/lib/i386/client
/opt/java/jre/lib/i386
/usr/lib/xulrunner-devel-1.9.0.11
/usr/lib/xulrunner-devel-1.9.0.11
/usr/java/packages/lib/i386
/lib
/usr/lib

但是,當我設置的JVM ARG「-Djava.library.path=/ tmp目錄/」我只得到:/tmp/

如果您要手動設置java.library.path這也許可以解釋為什麼LDD的作品從行,但你的,所以不會從eclipse/ java的。 你可以試試不設置,而不是調用System.loadLibrary java.library.path System.load的絕對路徑到庫中。這可能使JVM能夠找到你,所以,默認的路徑尋找它的依賴時。 當然,如果這是,那麼你也可以嘗試打開JNI調試輸出與「-verbose:當使用JNI」上線。這可能給您的線索來解決問題。

6. 是LD_LIBRARY_PATH環境工作
7. 加入這個答案可能是它可以在AIX機器,我們需要設置LIBPATH變數,而不是LD_LIBRARY_PATH。

『捌』 java怎麼調用linux的命令怎麼輸入一條命令讓linux用終端運行,然後獲得返回的文本

用java的process類了。
process這個類是一個抽象類,封裝了一個進程(你在調用linux的命令或者shell腳本就是為了執行一個在linux下執行的程序,所以應該使用process類)。
process類提供了執行從進程輸入,執行輸出到進程,等待進程完成,檢查進程的推出狀態,以及shut down掉進程。

『玖』 關於Linux下的java編程

[root@linux
root]#
vi
/etc/profile
export
JAVA_HOME=/usr/java/j2sdk1.4.2_04
←修改成你自己的版本
export
PATH=$PATH:$JAVA_HOME/bin
export
CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
[root@linux
root]#
source
/etc/profile
以上是設置環境變數.
[root@linux
root]#
vi
HelloWorld.java
public
class
HelloWorld
{
public
static
void
main(String[]
args)
{
System.out.println("Hello
World");
}
}
寫個小程序.
[root@linux
root]#
javac
HelloWorld.java

編譯
[root@linux
root]#
ls
-al
合計
16
-rw-rw-r--
1
fedora
fedora
425
3月
11
22:22
HelloWorld.class
←作成了
-rw-rw-r--
1
fedora
fedora
115
3月
11
22:22
HelloWorld.java
[root@linux
root]#
java
HelloWorld
Hello
World
満意嗎?

『拾』 如何在linux終端運行java

Linux終端下運行Java程序,需要安裝JDK。
這里先介紹如何安裝JDK,然後介紹如何安裝Java程序。
首先,打開終端,快捷鍵ctrl+alt+t;
安裝JDK,sudo apt-get install openjdk-7-jdk( 注意,這里需要輸入密碼);
切換到java程序所在的目錄;
編譯以.java結尾的程序,可以使用javac *.java編譯當前目錄下所有的java源程序,並生成相應的class文件;
假如含有主程序的類文件是MP3.java,則使用java MP3運行該java程序。

閱讀全文

與linuxjava調試相關的資料

熱點內容
新鄉市區疫情怎麼查詢app 瀏覽:158
我的世界伺服器怎麼弄圖 瀏覽:999
vc6的編譯框 瀏覽:198
程序員寫照 瀏覽:539
怎麼退出github伺服器版本 瀏覽:797
雲伺服器sip 瀏覽:910
對稱平衡型壓縮機 瀏覽:953
rust連接什麼伺服器 瀏覽:382
php刪除數組的空元素 瀏覽:74
有什麼古今翻譯的app 瀏覽:54
華為平板里的app熱門推薦怎麼關閉 瀏覽:731
kindle可以看pdf嗎 瀏覽:620
小米文件夾變小 瀏覽:324
為什麼安卓系統不設計橫屏 瀏覽:686
myeclipse編譯文件 瀏覽:586
水果解壓視頻教程 瀏覽:207
單片機控制的大一點的車 瀏覽:640
程序員中的榮譽 瀏覽:272
java的封裝性 瀏覽:387
命令提示符垃圾清理 瀏覽:806