hp-ux-ia64:jffi/ffi 编译总结

在HP-UX-IA64下编译JFFI及FFI遇到不少问题,官网jffi文档中也并无在hp-ux-ia64平台上有编译过。java

次文档仅为记录之用。记录编译过程,但并不意味着本人遇到的问题已经解决。linux

 

注意点:shell

1. hpux上装的gcc 4.3.2.编译时默认是32位。编64位须要加参数: -mlp64ui

2. hpux上的jdk(1.6)目录结构与linux上jdk目录不一致。64位版本java/javac/javah命令行在$JAVA_HOME/bin/IA64W目录下。ant启用$JAVA_HOME/bin的java命令,默认是32位的。解决的方法能够建文件夹而后 ln -s 三个命令链接,修改相应的$JAVA_HOME。spa

3. ant jar生成complete.jar,jffi.jar 等jar包时,脚本能识别机器。可是jffi的java代码里面并不支持ia-64-hpux致使打包的目录是unknown-HP-UX.查看jffi-1.2.7/src/main/java/com/kenai/jffi/internal/StubLoader.java文件,源代码中CPU未定义IA64,OS也未定义HPUX。致使取不到CPU,OS值是unknown。命令行

如不改源代码。build.xml中须要修改打jar包时的目录。不然ant test会报can't load jni/unknown-HP-UX/libjffi-1.2.so文件xml

 

4.须要修改makefile内容及.h头文件以下:文档

export CC="gcc -mbig-endian -mlp64 -pthread"
export LD="gcc -shared -fPIC -mbig-endian -mlp64 -mt -static-libgcc -Wl -O1 -lrt -ldl -lpthread"it

 

jffi-1.2.7/GNUmakefile 编译

SRC_DIR ?= $(shell pwd)/jni
==>
SRC_DIR ?= $(shell pwd)

 

JFLAGS = -fno-omit-frame-pointer -fno-strict-aliasing -DNDEBUG
==>
JFLAGS = -fno-omit-frame-pointer -fno-strict-aliasing -DNDEBUG -DMAP_ANON=MAP_ANONYMOUS -DFFI_NATIVE_RAW_API=0

 

FFI_CC = $(CCACHE) $(CC)
==>
FFI_CC = $(CC)

 

jffi-1.2.7/libtest/GNUmakefile 

$(CCACHE) $(CC) $(CFLAGS) -c $< -o $@
==>
$(CC) $(CFLAGS) -c $< -o $@

SOFLAGS = -shared -Wl,-O1
==>
SOFLAGS = -shared -Wl -O1

 

 

jffi-1.2.7/jni/jffi/endian.h
添加
# define LITTLE_ENDIAN 1234
# define BIG_ENDIAN 4321
# define BYTE_ORDER BIG_ENDIAN

jffi-1.2.7/jni/jffi/jffi.h
添加,省得不少文件都要加这个.h文件
#include <alloca.h>

 

jffi-1.2.7/jni/jffi/LongDouble.c ld = strtold(tmp, NULL);==>此处修改有点不负责任。128位的long double改为64位的double。实际应该用得很少,先将就下。。。ld = strtod(tmp, NULL);

相关文章
相关标签/搜索