`
zhangfeilo
  • 浏览: 391115 次
  • 性别: 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的使用简介

    gcc编译器的简单介绍,供初学者学习使用

    linux下gcc编译器的使用

    在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一 位Linux程序员面临的首要问题都是如何灵活运用C编译器。目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中...

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

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

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

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

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

    LINUX下gcc详细安装

    LINUX下gcc详细安装

    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-2.tgz

    由于上传文件大小限制,将工具链分为2个压缩文件,arm-linux-gcc-4.3.2-1.tgz和arm-linux-gcc-4.3.2-2.tgz 请务必下载完整,分别进行安装。 安装方法: 1.ubuntu 终端输入 tar -zxvf arm-linux-gcc-4.3.2-1.tgz -C ...

    cygwin下的arm-linux-gcc

    windows下生成arm-linux-gcc的工具.省了自己配置和编译的很多麻烦.生成的arm-linux-gcc自己进行过验证,可以使用.

    arm-linux-gcc-5.4.0.tar.gz

    Ubuntu安装arm-linux-gcc交叉编译工具 arm-linux-gcc工具包arm-linux-gcc-5.4.0.tar.gz

    linux离线安装gcc教程

    linux下离线安装gcc教程,

    linux gcc使用详解

    linux gcc使用详解,解释的很详细,带示例.

    mipsel-linux-gcc4.4.0.tgz

    mipsel-linux-gcc4.4.0.tgz

    Linux GCC使用教程

    GCC使用教程gcc是Linux编译器,这是使用手册@@

    arm-linux-gcc-4.4.3.tar.gz

    交叉编译 arm-linux-gcc-4.4.3.tar.gz

    Linux下GCC的使用

    在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一 位Linux程序员面临的首要问题都是如何灵活运用C编译器。GCC是在Linux下开发程序时必须掌握的工具之一。本文对GCC做了一个简要的介绍,主要...

    Linux 下 Gcc中文文档

    Gcc 中文文档。Gcc 是linux下强大的编译器。

    linux下GCC编译C程序

    GCC已不再是主要针对GNU项目自身的软件的小型C语言编译器了。如今,它已支持了许多不同的语言,包括C、C++、Ada、Fortran、Objective C,甚至还有Java。事实上,现代Linux系统除了可以自豪地炫耀那些由GNU工具直接...

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

    找了好久才找到的这个,以前使用低版本的arm-linux-gcc交叉编译工具时,编译QT出错,这里找了arm-linux-gcc-5.4.0,放在这里存下

Global site tag (gtag.js) - Google Analytics