Linux下Java呼叫C
概述
Java要想呼叫C的程式,就要把C生成的DLL檔案給Java呼叫,也就是要使用Java的本地化方法JNI呼叫C的DLL檔案。Java本地介面JNI(Java Native Interface),設計目的是與C/C++實現本地互動。
實現
1、在Java類中宣告native方法,在靜態程式碼塊中通過Sytem.loadLibrary("類名")來載入庫檔案;
2、編譯Java類(javac java檔名);
3、生成副檔名為h的標頭檔案(javah -jni java類名);
4、通過C/C++實現本地方法;
5、將本地方法生成動態連結庫;
6、Java程式呼叫動態連結庫。
示例
1、宣告HelloWorld類,宣告本地方法sayHello,載入HelloWorld庫檔案。
public class HelloWorld
{
static
{
System.loadLibrary("HelloWorld");
}
private native void sayHello();
public static void main(String[] args)
{
new HelloWorld().sayHello();
}
}
2、編譯HelloWorld.java
javac HelloWorld.java
3、聲稱C語言標頭檔案
javah -jni HelloWorld
4、實現本地方法
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv * env, jobject obj)
{
printf("Hello World in C!\n");
return;
}
5、聲稱動態庫
find / -name "jni.h"
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/jni.h
find / -name "jni_md.h"
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/linux/jni_md.h
gcc -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/ -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/linux -fPIC -shared HelloWorld.c HelloWorld.h -o libHelloWorld.so
6、執行程式呼叫動態庫
java -Djava.library.path=. HelloWorld
相關推薦
Linux下Java呼叫C
概述 Java要想呼叫C的程式,就要把C生成的DLL檔案給Java呼叫,也就是要使用Java的本地化方法JNI呼叫C的DLL檔案。Java本地介面JNI(Java Native Interface),設計目的是與C/C++實現本地互動。 實現 1、在Java類中宣告nati
linux下java呼叫c/c++庫
本文僅作為自己測試過程的一些記錄。由於在專案中想複用之前的c程式碼介面以減少java開發的工作量,因此做了最簡單的HelloWorld測試。java呼叫C/C++庫是使用JNI介面。具體過程記錄如下:1、在eclipse下建立一個名為nativeTest的java工程,在其中
linux下python呼叫C++動態庫以及庫函式
C++:首先C++需要編譯成動態共享庫C++程式碼(cpptest.cpp)如下------#include<iostream>using namespace std;extern "C"{//在extern “C”中的函式才能被外部呼叫int test(){
Linux下Java呼叫MySql的第一個例子(全過程) 及 MySql改密碼的種種誤區
第三步:解壓mysql-connector-java-5.1.24.tar.gz這個檔案到/usr/local/java/。事實上這個目錄是任意的,只不過為了方便。我把jdk和eclipse都安裝到了上面這個目錄下。如下所示:第四步:新建一個TestMySql工程,右鍵工程-
Linux下Java呼叫so檔案
嘗試了一下在linux下Java呼叫so檔案。需要注意以下幾點: 1,在linux下呼叫的so檔案的格式必須是linux的,而不是x86或其他。 2,linux打包的so檔案的位數必須和本機JVM的位數一樣,都是32位或都是64位,JVM位數可以通過java -ve
linux下如何執行c++程式(包括呼叫外部函式庫)
這個問題困擾了我好久,但在網路上搜索很久也沒有找到具體的,條理清晰的一篇。所以,自己動手豐衣足食(拖拖拖了一個月。。) 執行c++程式 事實證明gcc是理解不了c++的。。 用g++執行你的程式,比如:g++ main.cpp g++產生一個.out
linux下gcc編譯 .c檔案生成動態連結庫 .so檔案,並測試呼叫該連結庫
簡單介紹:linux中so檔案為共享庫,和windows下dll相似;so可以共多個程序呼叫,不同程序呼叫同一個so檔案,所使用so檔案不同;so原檔案不需要main函式;例項,1.通過mysqlTest.c中的函式mysql(),生成一個libmysql.so連結庫#inc
Linux/windows下java呼叫lingo
最近有一些朋友問我關於java程式呼叫lingo的問題,為了方便大家瞭解一些過程,下面就將java呼叫的詳細過程重新寫一下。在介紹java呼叫前首先介紹下,他們之間呼叫的原理。 原理:一個完整的java-lingo程式,必須包含三個要素,java程式-model
linux java 呼叫c++ 動態庫
1,準備工作,下載jna.jar, 這是動態庫依賴的jar包 wget http://repo1.maven.org/maven2/net/java/dev/jna/jna/4.5.2/jna-4.5.2.jar 如果沒有javac,需要自己安裝,請執行 sudo yu
linux下 sh呼叫java,執行class
本文主要介紹在linux下sh批處理檔案呼叫java的方法。shell程式設計的程式碼如下: #!/bin/bash #引入java環境變數 . /etc/profile #取得當前.sh檔案所在的目錄 DIR="$( cd "$( dirname "${BASH_SO
Linux環境下java呼叫ffmpeg命令進行視訊轉碼
1.這是在Linux系統下的程式碼,我執行後可以轉換成功: import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import
Linux下Java調試方法
java linux 參數 調試 jdb 1、如何開啟一個Java進程的調試選項?替換原有java程序:mv /usr/bin/java /usr/bin/java_true在/usr/bin/目錄下生成一個java文件,其內容如下:java_true -Xdebug -Xrunjdwp:
linux下清空c++ cin無效流的方式
ignore cpp () lang -cp print code ng- cin cin.clear(); cin.ignore(10000,‘\n‘);//這裏面的參數很重要linux下清空c++ cin無效流的方式
Linux 下 編譯Xerces-c++
linu ida 共享 ++ blank 這樣的 gunzip pad -c 原文地址: http://blog.csdn.net/chenlanmin/article/details/2200064 按照 doc/html 文件夾中的詳細指導編譯 Xerces-C++ 共
Linux下Java環境搭建
-o 問題 p s oracle tar final classpath bin ssp 操作系統: CentOS release 6.9 (Final)任務:安裝配置java環境[root@JxateiLinux src]# Wget http://download.o
Linux下Java運行.class文件,報錯找不到或無法加載主類
code 運行 pro jar 更改 class ssp linux lib classpath配置的錯誤,所以找不到.class文件。 原先的etc/profile中的classpath配置 export CLASSPATH=$JAVA_HOME/lib/tools.j
Eclipse直接完成JAVA呼叫C/C++ (Eclipse上使用CDT結合MinGW)
原文地址:http://www.blogjava.net/orangewhy/archive/2007/05/24/119645.html 網上都有很多在windows平臺下JAVA呼叫C/C++方法的介紹說明。但是,在此過程中
linux下java專案的部署
作為jvm與java程式碼的中間價,tomcat雖然不是最強大的容器,但是因為其開源免費,所以還是受到廣大開發者的qingmai, 把專案部署到tomcat中相當簡單,但是鑑於朋友的熟悉程度的不同,這裡還是說一下,懂得的可以飄過,謝謝。 前些篇文章以及介紹了tomcat的安裝方式,這裡直接從
Linux下Java執行.class檔案,報錯找不到或無法載入主類
classpath配置的錯誤,所以找不到.class檔案。 原先的etc/profile中的classpath配置 export CLASSPATH=$JAVA_HOME/lib/tools.jar 更改後的: export CLASSPATH=.:$JAVA_HOME
JNI 最簡單的Java呼叫C/C 程式碼
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!