1. 程式人生 > >Linux下Java呼叫C

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

 

相關推薦

LinuxJava呼叫C

概述 Java要想呼叫C的程式,就要把C生成的DLL檔案給Java呼叫,也就是要使用Java的本地化方法JNI呼叫C的DLL檔案。Java本地介面JNI(Java Native Interface),設計目的是與C/C++實現本地互動。 實現 1、在Java類中宣告nati

linuxjava呼叫c/c++庫

本文僅作為自己測試過程的一些記錄。由於在專案中想複用之前的c程式碼介面以減少java開發的工作量,因此做了最簡單的HelloWorld測試。java呼叫C/C++庫是使用JNI介面。具體過程記錄如下:1、在eclipse下建立一個名為nativeTest的java工程,在其中

linuxpython呼叫C++動態庫以及庫函式

C++:首先C++需要編譯成動態共享庫C++程式碼(cpptest.cpp)如下------#include<iostream>using namespace std;extern "C"{//在extern “C”中的函式才能被外部呼叫int test(){  

LinuxJava呼叫MySql的第一個例子(全過程) 及 MySql改密碼的種種誤區

第三步:解壓mysql-connector-java-5.1.24.tar.gz這個檔案到/usr/local/java/。事實上這個目錄是任意的,只不過為了方便。我把jdk和eclipse都安裝到了上面這個目錄下。如下所示:第四步:新建一個TestMySql工程,右鍵工程-

LinuxJava呼叫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

linuxgcc編譯 .c檔案生成動態連結庫 .so檔案,並測試呼叫該連結庫

簡單介紹:linux中so檔案為共享庫,和windows下dll相似;so可以共多個程序呼叫,不同程序呼叫同一個so檔案,所使用so檔案不同;so原檔案不需要main函式;例項,1.通過mysqlTest.c中的函式mysql(),生成一個libmysql.so連結庫#inc

Linux/windowsjava呼叫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

LinuxJava調試方法

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++ 共

LinuxJava環境搭建

-o 問題 p s oracle tar final classpath bin ssp 操作系統: CentOS release 6.9 (Final)任務:安裝配置java環境[root@JxateiLinux src]# Wget http://download.o

LinuxJava運行.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++方法的介紹說明。但是,在此過程中

linuxjava專案的部署

作為jvm與java程式碼的中間價,tomcat雖然不是最強大的容器,但是因為其開源免費,所以還是受到廣大開發者的qingmai, 把專案部署到tomcat中相當簡單,但是鑑於朋友的熟悉程度的不同,這裡還是說一下,懂得的可以飄過,謝謝。 前些篇文章以及介紹了tomcat的安裝方式,這裡直接從

LinuxJava執行.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 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!