`
zhangfeilo
  • 浏览: 401433 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

Linux下GCC使用方法简介

gcc 
阅读更多

 

平台介绍 
系统: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方法并编译 
Java代码 
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函数 
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.编写测试函数,编译并运行 
Java代码 
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的使用简介

    ### Linux 下 GCC 的使用简介 #### 一、GCC 概述 GCC(GNU Compiler Collection),作为 GNU 工具链中的核心组成部分,是一个广泛使用的开源编译器套件。它不仅支持 C 语言,还涵盖了 C++、ADA、Objective-C、Java...

    安装部署Linux安装gcc的四种方法

    【安装部署】Linux安装gcc的四种方法 常见的有以下几种安装方法 1、源码安装 2、rpm包安装 3、yum安装 (RedHat、CentOS) 4、apt-get安装 (debian,ubuntu) 以安装gcc为例,登陆https://gcc.gnu.org/,下载...

    arm-linux-gcc的安装方法

    ### ARM-Linux-GCC的安装方法 #### 一、引言 在嵌入式系统开发过程中,ARM架构因其低功耗、高性能等特性被广泛应用。为了能够在主机(通常是x86架构的PC)上编译出针对ARM架构目标平台可执行的程序,就需要构建一个...

    arm-linux-gcc-3.4.1(交叉编译器)

    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.rar

    第四步:将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-5.4.0.tar.gz

    总之,`arm-linux-gcc`是进行ARM架构Linux系统交叉编译的重要工具,它的安装和使用涉及到Linux环境变量配置、编译选项选择、库依赖管理等多个方面。熟练掌握这些技能,对于在嵌入式领域开发高效、可靠的应用至关重要...

    linux下gcc编译器的使用

    在Linux操作系统中,GCC(GNU Compiler Collection)是开发者最常使用的C语言编译器,它不仅支持C,还支持C++、Objective C以及多种其他语言,如Java、Fortran等。GCC的强大之处在于其开放、自由和灵活的特性,允许...

    Ubuntu下安装arm-linux-gcc交叉编译

    接下来,需要解压安装包,使用命令 sudo tar -xzvf arm-linux-gcc-4.3.2.tgz 解压到 /usr/local/arm 目录下。解压完成后,需要添加环境变量,用于 指定 arm-linux-gcc 的路径。 添加环境变量可以使用 gedit 打开...

    mipsel-linux-gcc4.4.0.tgz

    4. 开发与编译:有了交叉编译器,开发者可以使用`mipsel-linux-gcc`命令来编译针对MIPSel Linux系统的C/C++代码,生成可执行文件。 5. 软件部署:将编译好的二进制文件部署到实际的MIPSel Linux设备上运行,或者...

    arm-linux-gcc交叉编译器 3.4.1

    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 区别

    arm-linux-gcc 和 arm-elf-gcc 的主要区别在于使用不同的 C 库文件,arm-linux-gcc 使用 Glibc,而 arm-elf-gcc 使用 uClibc/uC-libc 或者 newlib。开发者可以根据自己的需求选择合适的 GCC 工具链。

    arm-linux-gcc-4.3.2(交叉编译器)

    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@...

    Linux下使用codeblocks交叉编译ARM-LINUX-GCC程序

    Linux 下使用 CodeBlocks 交叉编译 ARM-LINUX-GCC 程序 在这个资源中,我们将学习如何使用 CodeBlocks 在 Linux 平台下交叉编译 ARM-LINUX-GCC 程序。交叉编译是一种在不同的平台之间编译代码的技术,能让开发者在...

    arm-linux-gcc-4.4.3安装包及安装教程

    请注意,虽然`arm-linux-gcc-4.4.3`是一个旧版本,但在某些场景下仍然有其应用价值,如兼容老设备或特定的软件需求。不过,对于新的项目,建议考虑使用更新的版本,如`arm-linux-gcc-7.x`或`arm-none-eabi-gcc`,...

    linux中gcc4.8.5,下载解压即可直接使用,linux系统GCC编译

    Linux中的GCC(GNU Compiler Collection)是开源的、跨平台的编译器套件,用于将C、C++、Fortran、Objective-C等编程语言的源代码编译为可执行文件。GCC 4.8.5是该系列的一个稳定版本,发布于2015年,虽然不是最新版...

    arm-linux-gcc-5.4.0.tar.gz交叉编译器

    总结,ARM-Linux-GCC 5.4.0交叉编译器是嵌入式Linux系统开发的得力工具,它的使用涵盖了环境配置、Makefile编写、编译和链接等多个环节。理解并熟练掌握这一工具,对于提升ARM平台上的软件开发能力至关重要。

    linux下GCC编译C程序

    总之,GCC是Linux环境下C程序开发不可或缺的一部分,其强大的功能和广泛的语言支持使得它在开源世界中占据了重要地位。无论是新手还是经验丰富的开发者,都需要熟练掌握GCC的使用,以便高效地编写、编译和调试C语言...

    arm-linux-gcc-5.4.0交叉编译工具.rar

    使用`arm-linux-gcc-5.4.0.tar.gz`文件,你可以解压并安装这个交叉编译工具链。通常,安装步骤包括解压、配置、编译和安装。`readme.txt.txt`文件可能包含关于如何安装和使用这个工具链的指南和注意事项。 在编译QT...

    arm-linux-gcc-4.5.1(安装包及教程)

    描述中提到的"Ubuntu安装arm-linux-gcc-4.5.1"表明了整个过程是在Ubuntu环境下进行的,这是一个基于Debian的Linux发行版,广泛应用于桌面和服务器环境。"附件含gcc安装包及教程"意味着这个压缩包不仅包含了编译器的...

    arm-linux-gcc-4.3.2.rar

    《深入理解ARM-Linux GCC 4.3.2编译器》 在嵌入式系统开发领域,GCC(GNU Compiler Collection)是不可或缺的工具,它为多种编程语言提供...了解并熟练掌握其使用方法,对于优化软件性能、提高开发效率具有重要意义。

Global site tag (gtag.js) - Google Analytics