让java文件支持C语言预编译指令
一.运行环境
1.ubuntu
2.ubuntu中必须已安装:gcc,awk,sed (目前大家的机器都支持)
二.安装环境
1.把脚本gcc2java.sh 放在工程目录下。比如:./gcc2javateset/gcc2java.sh
2.在工程目录下建一个文件夹include,include目录下放C语言头文件。比
如:./gcc2javateset/include
三.GCC文件
1.概述:gcc文件是java文件的一种扩展文件,在gcc文件里面既可以使用C语言预编译指令又可
以使用java编程语言。
2.格式:
第一行:<?gcc version="1.0" encoding="utf-8"?> 标识该文件为gcc文件
注:第一行必须有该标识且“<?”前面不许有空格.
例如:
四.编译
1.如果我们不需要使用gcc文件参与编译,则编译步骤和以前一样。
2.如果我们想让gcc文件参与编译,则步骤如下:
A.执行脚本gcc2java.sh 。作用:把gcc文件转换为我们需要的java文件
注:当我们想转换特定的某个文件夾中的gcc文件时,我们执行:gcc2java.sh 文件夹路径
B.把.\out\src 覆盖掉工程中的src 。转换后的文件都在.\out
C.开始编译工程
五.gcc2java.sh 源码
#!/bin/sh
#11-12-03 to java support C
checkcommand()
{
if [ $1 -eq 0 ]; then
echo $2
else
echo ".....fail...."
exit
fi
}
gcc2java()
{
echo
echo
echo "***************************************"
echo "***************************************"
echo "*******XXX.GCC ----> XXX.JAVA*********"
echo "*** help: gcc2java.sh dirpath ****"
echo "*** V1.0 author:mingli date:11.12.04 *"
echo "***************************************"
echo "***************************************"
echo "Please wait for a few minutes.........."
echo
rm -rf out
mkdir out
mkdir out/temp
cp -rf $1 ./out/
#判断拷贝是否成功
checkcommand $? $1
dir=$(echo $1 | awk -F/ '{print $NF}')
echo $dir
if [ -z $dir ];then
dir=$(echo $1 | awk -F/ '{print $(NF-1)}')
echo $dir
fi
chmod +wxr -R ./out/
for file in $(find ./out/$dir -name "*.gcc")
do
echo $file
#echo ${file%.*}.tmp
gcc -x c -E -C -w $file -I ./include > ${file%.*}.tmp
cp -rf ${file%.*}.tmp ./out/temp
#删除从第一行到<?gcc ?>行
sed -e 1,`sed -n '/^<?gcc*/=' ${file%.*}.tmp`d ${file%.*}.tmp > ${file%.*}.tmp0
#删除由预编译产生的“# XXX”行
sed '/^# [0-9]\{1,\} \"*/'d ${file%.*}.tmp0 > ${file%.*}.java
rm -rf ${file%.*}.tmp*
done
#判断程序是否运行成功
checkcommand $? success
}
if [ $# -eq 0 ]; then
gcc2java ./src
elif [ $# -eq 1 ]; then
gcc2java $1
else
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo "!!Please input the true parameters!!"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
fi
分享到:
相关推荐
1.让java 支持C语言预编译指令的脚本 2.公司内部资料 3.建议不要下载改资料,如果有需要请去我的博客下载脚本文件
广西大学课程设计,使用java编写的c语言编译原理玩具,翻译到简单汇编指令。
下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 -------- -----------------------------------------------------------------------------------------------------------------------...
本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做JAVA职业规划、技术提升的可与我联系,交个朋友~ 本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做...
《现代编译原理:C语言描述》全面讲述了现代编译器的各个组成部分,包括词法分析、语法分析、抽象语法、语义检查、中间代码表示、指令选择、数据流分析、寄存器分配以及运行时系统等。全书分成两部分,第一部分是...
IvorHorton还著有关于C、C++和Java的多部入门级好书,如《C语言入门经典(第4版)》和《C++入门经典(第3版)》。 译者 杨浩,知名译者,大学讲师,从事机械和计算机方面的教学和研究多年,发表论文数篇,参编和翻译的...
Java编译语言将Java代码编译成.class文件(只有一种形式),而C/C++语言将代码编译成01码,不同的操作系统的01码指令不同,这造成了不能跨平台,而Java将这个任务交给JVM,不同操作系统上的JVM将.class文件编译成不同...
随着科技的发展和人工智能时代的来临,计算机中程序设计具有越来越重要的地位。C语言程序设计是程序设计者的入门语言,它使学习者更能容易理解...此语言的移植性好不同的处理器用不同的编译器编译指令达到移植的效果。
第十一章 编译预处理指令
18.变量的类型和作用域【Compiler Explorer查看汇编指令】 19.函数的变长参数【对比java的变长参数】 20.函数的递归【C语言实现斐波那契数列】 21.案例:汉诺塔 22.文件包含【领略编译器宏之以小搏大】 23.案例:...
源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可 源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是...
10.1 C语言的编译系统 10.1.1 预处理器 10.1.2 汇编器 10.1.3 连接器 10.1.4 目标文件的格式 10.1.5 符号解析 10.1.6 静态库 10.1.7 可执行目标文件及装入 10.1.8 动态连接 10.1.9 处理目标文件的一些工具 ...
10.1 c语言的编译系统 10.1.1 预处理器 10.1.2 汇编器 10.1.3 连接器 10.1.4 目标文件的格式 10.1.5 符号解析 10.1.6 静态库 10.1.7 可执行目标文件及装入 10.1.8 动态连接 10.1.9 处理目标文件...
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以...此语言的移植性好不同的处理器用不同的编译器编译指令达到移植的效果。 [1]
而且各个软件平台的C++启动代码和硬件指令不同,编译后的C++程序一般是不能跨平台的。而java从娘胎里出来就是为了跨平台执行的,不采 用二进制机器码作为最终代码,所以在移植方面较好。 3。C++的指针操作使得它不...
而c#语言是只有一种基本对象,并且类库也是很丰富的,C#和java优点类似,C#编译之后不是机器的代码,而是虚拟机中的元指令,C#也没有指针,但是可以实现内存的管理。C#是有字符串,而c语言是没有的。 三:c#可以做...
OpenMP(C),ForkJoin(JAVA)和Disruptor(JAVA)质数查找器这是我做过的最有趣的并发程序包之一。 目标保持不变:在输入数组中查找素数。 不同之处在于它的完成方式。 这不需要手动的并发过程,而是真正使用C和...
printf()的引入是为了照顾c语言程序员的感情需要 格式化输出 Formatter;格式化输入 Scanner;正则表达式 输出格式控制: 转义符: \ddd 1到3位8进制数指定Unicode字符输出(ddd) \uxxxx 1到4位16进制数指定...
机器的指令系统,汇编语言就是在此基础上 完善起来的。 高级语言 BASIC、PASCAL、C语言等等。用高级语 言编写的程序称源程序,它们必须通过编译 或解释、连接等步骤才能被计算机处理。 面向对象语言 C++、Java...
快速傅里叶变换C语言实现,使用CMakelist.txt进行配置,可在多平台编译优化,提高性能。可以用于安卓NDK开发,在Java层调用fftw3的FFT/IFFT接口函数,提高fft的运算效率。fftw3接口与ARM NEON指令优化提供的接口相同...