avian
是一个小型的Java虚拟机,实现了Java的部分基本功能。具体API可以看
这里
。不过这个虚拟机只提供源代码,需要你在linux、MSYS或Cygwin下编译好后才能使用,我在MSYS下尝试了一下,总是报错,最后只好转到Ubuntu下面才成功编译。
编译过程很简单,只要遵照他的提示就可以了,不过事先肯定是要装好GCC和JDK的(推荐OpenJDK),目标为win32平台时,还需要win32的头文件和库,可以从它的git站点
下载
。 下载后解压到avian目录的上一级目录。
1
|
$
export
JAVA_HOME=/usr/
local
/java
|
2
|
$
make
platform=windows arch=i386
|
make后面的平台和架构都有其他的选项,比如linux/darwin x86_64等,具体参数可以看
这里
,编译完成后在build目录下应该有个windows-i386文件夹,里面就是编译好的虚拟机和示例程序。
使用avian的好处就在于它很小,可以直接转为本地程序,下面就是在ubuntu的mingw和avian环境下,编译JAVA程序并且将其转化为可以在Window上运行的普通程序
avian 小型JAVA虚拟机(window-i386版本)
mingw 交叉编译环境
步骤1
建立项目目录${project},复制必要文件。
3
|
ar x ../windows-i386/libavian.a
|
4
|
cp
../windows-i386/classpath.jar boot.jar
|
步骤2
这一步在eclipse里面完成比较方便,编写JAVA源文件${源代码},直接把JRE替换为avian,再加入其他包如SWT等,统一用eclipse编译,直接导出为JAR包,导出时将其他JAR也解开。
步骤3
把上面生成的
JAR
包
转为目标文件。
1
|
../windows-i386/binaryToObject boot.jar boot-jar.o _binary_boot_jar_start _binary_boot_jar_end windows i386
|
步骤4
建立main.cpp文件
08
|
#if (defined __MINGW32__) || (defined _MSC_VER)
|
09
|
# define EXPORT __declspec(dllexport)
|
11
|
# define EXPORT __attribute__ ((visibility("default")))
|
14
|
#if (! defined __x86_64__) && ((defined __MINGW32__) || (defined _MSC_VER))
|
15
|
# define SYMBOL(x) binary_boot_jar_##x
|
17
|
# define SYMBOL(x) _binary_boot_jar_##x
|
22
|
extern
const
uint8_t SYMBOL(start)[];
|
23
|
extern
const
uint8_t SYMBOL(end)[];
|
26
|
bootJar(unsigned* size)
|
28
|
*size = SYMBOL(end) - SYMBOL(start);
|
35
|
main(
int
ac,
const
char
** av)
|
37
|
JavaVMInitArgs vmArgs;
|
38
|
vmArgs.version = JNI_VERSION_1_2;
|
40
|
vmArgs.ignoreUnrecognized = JNI_TRUE;
|
42
|
JavaVMOption options[vmArgs.nOptions];
|
43
|
vmArgs.options = options;
|
45
|
options[0].optionString =
const_cast
<
char
*>(
"-Xbootclasspath:[bootJar]"
);
|
49
|
JNI_CreateJavaVM(&vm, &env, &vmArgs);
|
50
|
JNIEnv* e =
static_cast
<JNIEnv*>(env);
|
52
|
jclass c = e->FindClass(
"Hello"
);
|
53
|
jmethodID m = e->GetStaticMethodID(c,
"main"
,
"([Ljava/lang/String;)V"
);
|
54
|
if
(not e->ExceptionCheck()) {
|
55
|
jclass stringClass = e->FindClass(
"java/lang/String"
);
|
56
|
if
(not e->ExceptionCheck()) {
|
57
|
jobjectArray a = e->NewObjectArray(ac-1, stringClass, 0);
|
58
|
if
(not e->ExceptionCheck()) {
|
59
|
for
(
int
i = 1; i < ac; ++i) {
|
60
|
e->SetObjectArrayElement(a, i-1, e->NewStringUTF(av[i]));
|
63
|
e->CallStaticVoidMethod(c, m, a);
|
70
|
if
(e->ExceptionCheck()) {
|
72
|
e->ExceptionDescribe();
|
步骤5
编译和链接,下面的程序名称如msvc++都是我取的别名,因为原名称实在太长了,应该是i586-mingw32msvc-c++,不同的mingw版本可能会有所不同,${project}就是你工程的名称。
1
|
export
JAVA_HOME=/usr/lib/jvm/java-6-openjdk
|
2
|
msvc++ -I$JAVA_HOME/include -I$JAVA_HOME/include/win32 -D_JNI_IMPLEMENTATION_ -c main.cpp -o main.o
|
3
|
msdlltool -z ${project}.def *.o
|
4
|
msdlltool -d ${project}.def -e ${project}.exp
|
5
|
msvc++ ${project}.exp *.o -L../win32/lib -lmingwthrd -lm -lz -lws2_32 -mwindows -mconsole -o ${project}.exe
|
6
|
msstrip --strip-all ${project}.exe
|
最后
把{project}.exe复制回Windows即可,在只加入SWT的情况下,程序的大小是2M多
分享到:
相关推荐
NULL 博文链接:https://kingj.iteye.com/blog/1614892
Avian 是一个轻量级的 Java 虚拟机和类库,提供了 Java 特性的一个有用的子集,适合开发跨平台、自包容的应用程序。 Avian 实现非常快速而且体积小,主要特性: Just-In-Time (JIT) 编译,快速方法执行 ...
Avian-轻量级Java虚拟机(JVM) 请注意:该项目目前尚未开发,维护或支持。 随时使用和/或派生它,但是此处提交的任何问题都将被忽略。 快速开始 这些是在x86_64体系结构的各种操作系统上构建Avian的示例。 您可能...
Avian influenza and Newcastle disease 2009 ISBN 978-88-470-0825-0
Joomla Avian模板
JavaCPP 提供了对 Java 内部本机 C++ 的高效访问,这与某些 C/C++ 编译器与汇编语言交互的方式没有什么不同。...在底层,它使用 JNI,因此除了Android、Avian和RoboVM(指令)之外,它还适用于 Java SE 的所有实现。
无人机(AVIAN)低空摄影测量作业流程.docx
Avian Influenza A (H5N1) Infection in Humans是一份整理发布的食品资料文档,只为你能够轻...该文档为Avian Influenza A (H5N1) Infection in Humans,是一份很不错的参考资料,具有较高参考价值,感兴趣的...
Avian Freeware Suite(AFS)提供了两件事:开发人员具有Java Swing小部件,XML处理,Fortran95和Pascal的库; 最终用户(医学生,医生,科学家)使用可以使用的生产力工具(测验,XML数据库和PDF)
OkHttp 适用于 Android ... 与 Java 6 的运行时兼容性作为构建的一部分强制执行,以确保符合 Android 和旧版本的 JVM。测试在桌面上使用 Maven 在桌面上运行 OkHttp 测试。 在桌面上运行 SPDY 测试使用需要 OpenJDK 7+
New model for the avian magnetic compass Bioelectromagnetics 21:555^565 (2000) NewModel for the Avian Magnetic Compass A.R. Liboff1* and K.A. Jenrow2 1Department of Physics, OaklandUniversity, ...
高致病性禽流感病毒感染鸭的致死性病理学变化研究,刘晓静,郑世民,为探究国内高致病性禽流感病毒感染家养水禽致病机制,本实验选取对家鸭具有高致病性的早期毒株A/GS/LN/45/04,并对其感染鸭病理学变�
Nonlinear switching control for suppressing the spread of avian influenza
J亚群禽白血病病毒感染海兰褐蛋鸡诱发血管瘤,王桂花,于琳琳,2009到2010年在中国东部爆发了海兰褐的皮肤和内脏器官的肿瘤。感染鸡群呈现贫血、产蛋率下降、死亡率高(高达20%)的特点。大部分肿�
Avian Computing试图通过改变我们对并行程序的看法来有效地创建并行程序。 Avian Computing不鼓励思考代码行,并鼓励我们使用一种新的模型:鸟群。 将模型更改为成群的鸟,可以更轻松地考虑我们要同时执行的动作,...
鸟类范围转移 使用栖息地,饮食和气候生态位广度预测繁殖鸟类范围的变化
Stylus.tbundle Stylus编程语言的TextMate 包... mkdir -p ~/Library/Application\ Support/Avian/Bundles cd ~/Library/Application\ Support/Avian/Bundles git clone git://github.com/jameswomack/Stylus-TextMate