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

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

注意点:

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

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。

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文件

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"

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);

hp-ux-ia64:jffi/ffi 编译总结的更多相关文章

  1. Oracle 11203 + ASM安装 for HP UX

    一,安装前准备 1.创建所需组和用户 /usr/sbin/groupadd -g 1000 oinstall/usr/sbin/groupadd -g 1020 asmadmin/usr/sbin/g ...

  2. 编译安装tree命令

    查看当前的tree [12:33:33 root@C8[ ~]#rpm -qi tree Name : tree Version : 1.7.0 Release : 15.el8 Architectu ...

  3. hp unix_ssh

    http://www.cyberciti.biz/faq/howto-hpux-sshd-service-startup-shutdown/ http://searchnetworking.techt ...

  4. Ubuntu 15.04 编译UE4 for Linux版

    源 起 Unreal Engine 4 是全球最先进的Realtime Illumination & Physical 引擎: 长期以来,UE4都只有Windows版和Mac版,今年终于向Li ...

  5. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  6. (转)使用 SCons 轻松建造程序

    在软件项目开发过程中,make 工具通常被用来建造程序.make 工具通过一个被称为 Makefile 的配置文件可以自动的检测文件之间的依赖关系,这对于建造复杂的项目非常有帮助,然而,编写 Make ...

  7. 2.Nginx优化

    [教程主题]:Nginx优化 [课程录制]: 创E [主要内容] Nginx 优化 nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine ...

  8. 循序渐进Python3(一)-- 初识Python

    一.Python起源                

  9. Nginx工作原理和优化

    转自:http://blog.csdn.net/hguisu/article/details/8930668 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过 ...

随机推荐

  1. webpack 配置 (支持 React SCSS ES6 编译打包 和 模块热更新 / 生成SourceMap)

    1.首先是目录结构 |-node_modules/ #包文件 |-build/ #静态资源生成目录 |-src/ #开发目录 |-js/ |-index.js #入口文件 |-app.js #Reac ...

  2. 2015-09-21CSS:引入方式、选择器、注释、文字样式

    1.HTML中引入CSS的方式 HTML中引入CSS的样式有4种:行内式.内嵌式.导入式和链接式. ⑴行内式 行内式是在标记的style属性中设定CSS样式.这种方式没有体现出CSS的优势,不推荐使用 ...

  3. 13个简单有用的android开发代码

    1:查看是否有存储卡插入 String status=Environment.getExternalStorageState(); if(status.equals(Enviroment.MEDIA_ ...

  4. Directory类

    string[] pathes = Directory.GetDirectories(@"G:\ReawFiles");//获得所有的文件夹 string[] pathes = D ...

  5. OC语法简写

    NSNumber [NSNumber numberWithInt:666] 等价于 @666 [NSNumber numberWithLongLong:666ll] 等价于 @666ll [NSNum ...

  6. js 函数参数形式

    1. var a = function(b,c){ console.log(arguments);}a("1","cc"); ->  ["1&q ...

  7. Direct2D 加载位图

    说明: 通过WIC从文件加载位图. 可缩放后加载到内存. 源码: HRESULT LoadImageFormFile( IWICImagingFactory *pWicFactory, ID2D1Re ...

  8. gitHub远程分支创建

    1.在本地master上分出一个项目分支 git checkout -b bug1_dujie git checkout -b bug1_dujie origin/master 在远程添加分支 $gi ...

  9. C++ 性能剖析 (一)

    C++ 性能剖析 (一) 性能问题也不是仅仅用“技术”可以解决的,它往往是架构,测试,假设等综合难题.不过,对于一个工程师来说,必须从小做起,把一些“明显”的小问题解决.否则的话积小成多,千里堤坝,溃 ...

  10. Spark On YARN内存分配

    本文转自:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicool 此文解决了Spark ...