平台介绍 系统:ubuntu10.04 jdk:Java(TM) SE Runtime Environment (build 1.6.0_20-b02) gcc:gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5
如上一篇博客写道的先是简单的调用,本篇则是进一步带返回值的调用。 gcc编译器会根据文件后缀名来识别C或C++程序,所以既然是java调用C语言则C语言部分的文件的后缀名要以.c结尾,否则编译时容易出问题。 本示例中本地方法生命为静态方法,如果不是静态方法则过程略有差异,不详细描述。 JNI关于字符串处理部分API jstring NewStringUTF(JNIEnv* env,const char bytes[]) const jbyte* GetStringUTFChars(JNIEnv*env,jstring string,jboolen* isCopy) void ReleaseStringUTFChars(JNIEnv*env,jstring string,const jbyte bytes[]) 1.编写java native方法并编译
public class StringTest { public static native String sayHello(String strName); static { System.loadLibrary("StringTest"); } }
public class StringTest { public static native String sayHello(String strName); static { System.loadLibrary("StringTest"); } } java StringTest.java 2.用javah生成头文件 javah StringTest 3.编写C函数
#include "StringTest.h" #include <stdio.h> #include <string.h> JNIEXPORT jstring JNICALL Java_StringTest_sayHello(JNIEnv * env, jclass cl, jstring instring) { jstring result; const char *str = (*env)->GetStringUTFChars(env, instring, JNI_FALSE); printf("Native methods---Hello,%s\n",str); char * res; strcpy(res,str); result=(*env)->NewStringUTF(env, res); (*env)->ReleaseStringUTFChars(env, instring,str); return result; }
#include "StringTest.h" #include <stdio.h> #include <string.h> JNIEXPORT jstring JNICALL Java_StringTest_sayHello(JNIEnv * env, jclass cl, jstring instring) { jstring result; const char *str = (*env)->GetStringUTFChars(env, instring, JNI_FALSE); printf("Native methods---Hello,%s\n",str); char * res; strcpy(res,str); result=(*env)->NewStringUTF(env, res); (*env)->ReleaseStringUTFChars(env, instring,str); return result; }
4.编译c函数,生成lib文件 (当前目录下需要jdk/include/下的所有.h文件)
gcc -fPIC -I /usr/lib/jvm/java-6-sun/include/ -I /usr/lib/jvm/java-6-sun/include/linux/ -shared -o libStringTest.so StringTest.c
gcc -fPIC -I /usr/lib/jvm/java-6-sun/include/ -I /usr/lib/jvm/java-6-sun/include/linux/ -shared -o libStringTest.so StringTest.c
将so文件拷贝到 java.library.path(jdk/jre/i386/)下,如果找不到路径通过System.out.println(System.getProperty("java.library.path")); 5.编写测试函数,编译并运行
public class Demo { public static void main(String [] args) { String result = StringTest.sayHello("javaCallC"); System.out.println("JavaMethod--"+result); } }
public class Demo { public static void main(String [] args) { String result = StringTest.sayHello("javaCallC"); System.out.println("JavaMethod--"+result); } } 编译:javac Demo.java 6.程序结果
Native methods---Hello,javaCallC JavaMethod--javaCallC
|
分享到:
相关推荐
### Linux 下 GCC 的使用简介 #### 一、GCC 概述 GCC(GNU Compiler Collection),作为 GNU 工具链中的核心组成部分,是一个广泛使用的开源编译器套件。它不仅支持 C 语言,还涵盖了 C++、ADA、Objective-C、Java...
【安装部署】Linux安装gcc的四种方法 常见的有以下几种安装方法 1、源码安装 2、rpm包安装 3、yum安装 (RedHat、CentOS) 4、apt-get安装 (debian,ubuntu) 以安装gcc为例,登陆https://gcc.gnu.org/,下载...
### ARM-Linux-GCC的安装方法 #### 一、引言 在嵌入式系统开发过程中,ARM架构因其低功耗、高性能等特性被广泛应用。为了能够在主机(通常是x86架构的PC)上编译出针对ARM架构目标平台可执行的程序,就需要构建一个...
arm-linux-gcc交叉编译器,版本3.4.1,用于Linux下的ARM开发。 安装方法: 1. tar zxvf arm-linux-gcc-3.4.1.tgz -C/ 2. 编辑 ~/.bashrc ,加入 export PATH=$PATH:/usr/local/arm/3.4.1/bin 3. 验证安装 [root@...
第四步:将arm-linux-gcc-4.3.2.bz2解压到/usr/local/arm目录下 sudo tar xvf arm-linux-gcc-4.3.2.bz2 -C /usr/local/arm 第五步:进入到 /usr/local/arm cd /usr/local/arm cd 4.3.2 cd bin pwd得到arm-linux-gcc...
总之,`arm-linux-gcc`是进行ARM架构Linux系统交叉编译的重要工具,它的安装和使用涉及到Linux环境变量配置、编译选项选择、库依赖管理等多个方面。熟练掌握这些技能,对于在嵌入式领域开发高效、可靠的应用至关重要...
在Linux操作系统中,GCC(GNU Compiler Collection)是开发者最常使用的C语言编译器,它不仅支持C,还支持C++、Objective C以及多种其他语言,如Java、Fortran等。GCC的强大之处在于其开放、自由和灵活的特性,允许...
接下来,需要解压安装包,使用命令 sudo tar -xzvf arm-linux-gcc-4.3.2.tgz 解压到 /usr/local/arm 目录下。解压完成后,需要添加环境变量,用于 指定 arm-linux-gcc 的路径。 添加环境变量可以使用 gedit 打开...
4. 开发与编译:有了交叉编译器,开发者可以使用`mipsel-linux-gcc`命令来编译针对MIPSel Linux系统的C/C++代码,生成可执行文件。 5. 软件部署:将编译好的二进制文件部署到实际的MIPSel Linux设备上运行,或者...
arm-linux-gcc交叉编译器,版本3.4.1,用于Linux下的ARM开发。 安装方法: 1. tar zxvf arm-linux-gcc-3.4.1.tgz -C/ 2. 编辑 ~/.bashrc ,加入 export PATH=$PATH:/usr/local/arm/3.4.1/bin 3. 验证安装 [root@...
arm-linux-gcc 和 arm-elf-gcc 的主要区别在于使用不同的 C 库文件,arm-linux-gcc 使用 Glibc,而 arm-elf-gcc 使用 uClibc/uC-libc 或者 newlib。开发者可以根据自己的需求选择合适的 GCC 工具链。
Linux 下使用 CodeBlocks 交叉编译 ARM-LINUX-GCC 程序 在这个资源中,我们将学习如何使用 CodeBlocks 在 Linux 平台下交叉编译 ARM-LINUX-GCC 程序。交叉编译是一种在不同的平台之间编译代码的技术,能让开发者在...
请注意,虽然`arm-linux-gcc-4.4.3`是一个旧版本,但在某些场景下仍然有其应用价值,如兼容老设备或特定的软件需求。不过,对于新的项目,建议考虑使用更新的版本,如`arm-linux-gcc-7.x`或`arm-none-eabi-gcc`,...
arm-linux-gcc交叉编译器,版本3.4.1,用于Linux下的ARM开发。 安装方法: 1. tar zxvf arm-linux-gcc-3.4.1.tgz -C/ 2. 编辑 ~/.bashrc ,加入 export PATH=$PATH:/usr/local/arm/3.4.1/bin 3. 验证安装 [root@...
总结,ARM-Linux-GCC 5.4.0交叉编译器是嵌入式Linux系统开发的得力工具,它的使用涵盖了环境配置、Makefile编写、编译和链接等多个环节。理解并熟练掌握这一工具,对于提升ARM平台上的软件开发能力至关重要。
总之,GCC是Linux环境下C程序开发不可或缺的一部分,其强大的功能和广泛的语言支持使得它在开源世界中占据了重要地位。无论是新手还是经验丰富的开发者,都需要熟练掌握GCC的使用,以便高效地编写、编译和调试C语言...
使用`arm-linux-gcc-5.4.0.tar.gz`文件,你可以解压并安装这个交叉编译工具链。通常,安装步骤包括解压、配置、编译和安装。`readme.txt.txt`文件可能包含关于如何安装和使用这个工具链的指南和注意事项。 在编译QT...
Linux中的GCC(GNU Compiler Collection)是开源的、跨平台的编译器套件,用于将C、C++、Fortran、Objective-C等编程语言的源代码编译为可执行文件。GCC 4.8.5是该系列的一个稳定版本,发布于2015年,虽然不是最新版...
描述中提到的"Ubuntu安装arm-linux-gcc-4.5.1"表明了整个过程是在Ubuntu环境下进行的,这是一个基于Debian的Linux发行版,广泛应用于桌面和服务器环境。"附件含gcc安装包及教程"意味着这个压缩包不仅包含了编译器的...
《深入理解ARM-Linux GCC 4.3.2编译器》 在嵌入式系统开发领域,GCC(GNU Compiler Collection)是不可或缺的工具,它为多种编程语言提供...了解并熟练掌握其使用方法,对于优化软件性能、提高开发效率具有重要意义。