爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7988|回复: 3

[经验总结] NCL在IBM机器AIX系统环境的编译-主要是cairo库的编译

[复制链接]
发表于 2014-2-27 16:51:07 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
【如果没有编译cairo库,ncl无法在大机上生成PNG格式的文件】
对AIX来说,安装ncl是有点复杂的
首先是环境变量的设置
export OBJECT_MODE=64 !power6是64位的
export CC=xlc
export CXX=xlC
export FC=xlf90
export F77=xlf
export CPP=cpp
安装PNG时要注意提示with-pic:
./configure  --with-pic --prefix=/gpfs_home/cjq/soft/cjq
make all install
装cairo非常复杂
要装fontconfig
先装pkg-config
ncl编者要求,安装了PKG_CONFIG之后bash环境设置成如下:
export PKG_CONFIG_PATH=/gpfs_home/cjq/soft/cjq/lib/pkgconfig
export LD_LIBRARY_PATH=/gpfs_home/cjq/soft/cjq/lib
export PATH=/gpfs_home/cjq/soft/cjq/bin:$PATH
安装fontconfig却发现有错误:
Could not load program /gpfs_home/cjq/soft/cjq/bin/fc-cache:
Could not load module /gpfs_home/cjq/soft/cjq/lib/libfreetype.a(libfreetype.so.6).
        Dependent module /gpfs_home/cjq/soft/cjq/lib/libz.a(libz.so.1) could not be loaded.
        Member libz.so.1 is not found in archive
Could not load module fc-cache.
        Dependent module /gpfs_home/cjq/soft/cjq/lib/libfreetype.a(libfreetype.so.6) could not be loaded.
Could not load module .
按照网络上的建议:
#使用 ldd 查看 rpm依赖关系
ldd /bin/rpm |grep zlib.so.1
zlib.so.1 => not found
zlib.so.1 => not found
说明系统找不到zlib.so.1
find / -name zlib.so.1
找到该文件后,拷贝到 /usr/lib 及 /usr/local/lib
编辑etc/ld.so.conf,在其中加入zlib.so.1 所在的目录
使用/sbin/ldconfig –V  命令,让更改生效

执行一遍之后问题还是没解决。
最后通过阅读理解:
ncl编者要求中,LD_LIBRARY_PATH是一种用来定义共享动态链接库路径的定义
定义之后系统很多软件去寻找共享动态链接库lib*.so文件(lib*.a为静止链接库文件)
一般大家编译的库都是静态库,相对动态库而言,前者依赖小比较少出现问题。

FreeType,expat 安装相对容易
安装FreeType有时可能要:
./configure --with-gnu-ld --prefix=/gpfs_home/cjq/soft/cjq
安装pixman 0.22,提示udefined rpl_malloc
grep rpl_malloc ./*
发现libpng里面有这个定义
/* Define to rpl_malloc if the replacement function should be used. */
#undef malloc
直接删除掉,编译此次问题时解决了

安装cairo还是有新的问题,提示
cairo-script-scanner.c", line 193.24: 1506-022 (S) "__jmpbuf" is not a member of "struct _csi_scanner"等提示好多
找到原始定义的地方cairo-script-private.h
struct _csi_scanner {
    jmp_buf jmpbuf;  这里明明有定义!!
在网络上学习到jmp_buf是setjmp.h的一种用来缓冲的函数
网络上也见jmpbuf也是一种函数
所以将jmpbuf改成jmpbuf_cjq
并把cairo-script-scanner.c的所有jmpbuf改成jmpbuf_cjq
成功了。

【笨拙的经验,也来分享,感谢成都zhouzhiqiang老师不厌我烦的讨论和建议】
密码修改失败请联系微信:mofangbao
发表于 2014-2-27 22:03:38 | 显示全部楼层
哈哈 顶一下
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-3-3 12:30:56 | 显示全部楼层
密码修改失败请联系微信:mofangbao
发表于 2017-4-24 10:55:56 | 显示全部楼层
谢谢分享~~~~~
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表