GCJ让java程序脱离jre执行

简介: 一 首先,下载如下软件:1 http://sourceforge.net/projects/mingw/MinGW-5.1.3.exe 2 http://sourceforge.net/projects/gnuwin32/libiconv-1.9.2-1-bin.ziplibiconv-1.9.2-1-lib.zip 以上只是当时的最新版,随着版本更新,请选择最新版下载。

一 首先,下载如下软件:
1 http://sourceforge.net/projects/mingw/
MinGW-5.1.3.exe

2 http://sourceforge.net/projects/gnuwin32/
libiconv-1.9.2-1-bin.zip
libiconv-1.9.2-1-lib.zip

以上只是当时的最新版,随着版本更新,请选择最新版下载。

二 安装
1 安装mingGW,以下选项一定要选择:
mingw-runtime
mingw32-make
gcc-java
其他默认即可。
2 安装libiconv,分别解压libiconv-1.9.2-1-bin.zip和libiconv-1.9.2-1-lib.zip到mingGW安装目录即可。

三 准备环境
1 把minggw的bin目录加到path系统变量中中;
2 使用gcj编译java程序,需要屏蔽掉jdk的环境变量,为了不影响jdk的正常使用,编写如下bat,命名为j2e.bat备用:

@echo off
Set CLASSPATH=
gcj -c %1.java -o %1.o
gcj --main=%1 -o %1.exe %1.o

3 编写java类,内容如下:
public class Hello
{
    public static void main(String[] args) throws Exception
    {
        System.out.println("Hello exe4j");
    }
}

4 编译:
运行j2e Hello,程序生成了Hello.exe,细心查看发现这个文件比较大,因为他把jre也打包进来了。

5 部署:
是不是把这个hello.exe拿走就可以了吗??不行,还要带上libiconv2.dll,不要忘记。 

目录
相关文章
|
2月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
1月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
72 1
|
26天前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
40 0
|
2月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
214 2
|
2月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
159 1
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
74 1
|
2月前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
43 0
|
2天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
2天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。
|
2天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
14 3