Archive

Posts Tagged ‘AIX’

Work on AIX - day 7

May 23rd, 2008

先把Makefile的兼容性解决了,主要就是用了下Makefile的条件判断区分了一下CFLAGS和LDFLAGS参数,其实没啥。。。

前几天解决了代码里面因big endian引起的不兼容,业务请求下发,处理到存储过程处又卡住了,最后顺藤摸瓜跟出来也是一个endian issue。。。

然后继续,又遇到一个存储过程结果不正确的问题,跟下去,还是endian issue。。。

再继续,发现SIGTERM信号不能正常退出。跟了一下,发现进程阻塞在了ct_exit()函数处。调试过后,发现一个context在主进程初始化,然后在子进程销毁就会出现这个情况;要是在同一个进程中做这两个操作则没有问题。但是同样的流程在Linux平台下是没有问题的!这个现象说明了context这个东东一定是用了什么不能通过fork()往子进程传递的东西!查了一下OpenClient的手册,只讲了context是一个封闭的数据结构,具体的实现原理并没有说。我们只有猜了,从APUE进程中所描述,父子进程不共享的只有PID, PPID, 一些与时间相关的参数,一些信号相关的参数等等;我能想得到的也就是AIX下面的ct_exit()可能用到了信号相关的处理。。。暂时没办法,为了兼容,只能把数据库的初始化放到daemon()之后了。。。

随着集成测试的深入,移植引出的问题还会慢慢凸显。上周对移植这个工作还没有怎么重视,现在不得不说,移植没这么简单,需要很多的经验,不然也不会有《UNIX到Linux的移植》这么厚一本书了。。。可以说,这本书对这次的移植还是起到不少参考作用的。

早知道这么多问题,就应该用Linux on Power技术了。。。不过据说也没办法,MOR不同意。。。继续折腾Sybase on AIX吧。。。

saphires 职场

Work on AIX - day 6

May 21st, 2008

今天在搞HACMP - High Availability Cluster Multi Processing

发现大公司就是喜欢把一个简单的概念复杂化,HA就HA吧,偏偏搞出个HACMP,搞得巨高深似的。功能多少就不说了,资料就能搞出一大堆。还好有IBM的工程师帮我们搞,今天就忙着写文档了,基本上没盯这事儿,到晚上搞定了,偶啥也不知道。不过这个也不是我需要关心的,:)

一天就这样过去了。。。

saphires 职场

Work on AIX - day 5

May 19th, 2008

今天三个人一起折腾Sybase连接,连接初始化完成过后一用就断,还报出一些kernel warnings,折腾了一天。。。

最后到快下班的时候,代码注释得只剩下个位数行了,终于定位到pthread与sybase connection之间的冲突问题,上网一查,结果Sybase on AIX要与多线程一起使用需要链接另外一个库,而不是原有的库。

同样的程序,在Linux下面线程与否都链接同样的库;到了AIX下面首先是区分32bit与64bit,然后再区分线程安全否,两两结合就搞出4个不同库来。。。真是被这玩意儿搞死了。。。

这种问题的产生源于对新系统平台的无知,强烈呼唤系统工程师!!!

今天就这么点成果,仅改了几个字节的链接参数,不过这对于项目的进展是突破性的,porting to AIX的过程基本上就算结束了。。。唉,无语。。。

saphires 职场

Work on AIX - day 4

May 15th, 2008

今天解决了三个问题,还算是卓有成效:一是signal handler的不兼容引起了一个信号处理程序里面产生新的信号导致死循环的问题;二是由于big endian引出的一个不兼容bug;三是解决了gcc在AIX下的动态库链接问题。

前两个就不值一提了,稍微跟一跟就解决了,不过也彰显偶的功力不够。。。第三个问题在这几天的移植过程中一直困扰着我们,目标文件早在昨天就编译出来了,可是用gcc死活链接不过去,说找不到库。。。勉强用xlc把程序链接出来了,但是想起来着实不爽,目标文件都出来了,其实就是链接参数的问题了,没有道理一定要用xlc才能把它链接出来。。。昨天找出Using the GNU C/C++ complier on AIX这篇文章,偶觉得甚有希望,苦于没有调试环境只有今天下午才试了一下,终于大功告成。。。NND在AIX下面不是通过-lxxx会自动找.so和.a,而是要通过特定的参数才能实行动态库的链接,这几个链接参数真是把我们折腾死了!!!

######################################
### compile and link with gcc on AIX
######################################

[root@p55A_03 aa]# gcc -c -o libstatic1.a static.c
[root@p55A_03 aa]# gcc -Wl,-G -shared -o libstatic1.so dynamic.c -L/opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0
[root@p55A_03 aa]# ls -l libstatic1.a libstatic1.so
-rw-r–r– 1 root system 965 2008-05-15 07:50 libstatic1.a
-rwxr-xr-x 1 root system 3167 2008-05-15 07:50 libstatic1.so
[root@p55A_03 aa]# gcc -o test test.c -lstatic1 -L.
[root@p55A_03 aa]# ldd ./test
./test needs:
/usr/lib/libc.a(shr.o)
/unix
/usr/lib/libcrypt.a(shr.o)
[root@p55A_03 aa]# ./test
static 1
[root@p55A_03 aa]# gcc -Wl,-brtl -o test test.c -lstatic1 -L.
[root@p55A_03 aa]# ldd ./test
./test needs:
./libstatic1.so
/usr/lib/libc.a(shr.o)
/usr/lib/librtl.a(shr.o)
/unix
/usr/lib/libcrypt.a(shr.o)
[root@p55A_03 aa]# ./test
dynamic 1

######################################
### compile and link with xlc on AIX
######################################

[root@p55A_03 aa]# xlc -c -o libstatic1.a static.c
[root@p55A_03 aa]# xlc -bnoentry -G -o libstatic1.so dynamic.c -lc
[root@p55A_03 aa]# ls -l libstatic1.a libstatic1.so
-rw-r–r– 1 root system 1024 2008-05-15 07:53 libstatic1.a
-rwxr-xr-x 1 root system 1456 2008-05-15 07:53 libstatic1.so
[root@p55A_03 aa]# xlc -o test test.c -lstatic1 -L.
[root@p55A_03 aa]# ldd ./test
./test needs:
/usr/lib/libc.a(shr.o)
/unix
/usr/lib/libcrypt.a(shr.o)
[root@p55A_03 aa]# ./test
static 1
[root@p55A_03 aa]# xlc -bdynamic -brtl -o test test.c -lstatic1 -L.
[root@p55A_03 aa]# ldd ./test
./test needs:
./libstatic1.so
/usr/lib/libc.a(shr.o)
/usr/lib/librtl.a(shr.o)
/unix
/usr/lib/libcrypt.a(shr.o)
[root@p55A_03 aa]# ./test
dynamic 1

最后闲着没事,把openssh装上了,不得不说的是,这个AIX被偶搞得越来越象Linux了。。。把public key加上,再也不用telnet登录了。。。

saphires 职场

Work on AIX - day 3

May 15th, 2008

继续在AIX上工作,三天了,每天都有一些收获,但又不够多。。。

第一天,知道AIX上也可以用rpm,把bash装上,接着把vim装上,基本上把工作环境向Linux靠了一步。装了gcc, gmake, gdb, ctags, screen等等,开发环境向Linux靠了一步。

第二天,查了点资料把vim的代码高亮调出来,又做了个alias把ls做到了GNU ls上,把目录列表的高亮也做出来了。开发环境又向Linux靠了一大步。试着从source code编ssh,未成功。
下了IBM Java 5 SDK,把tomcat装上了。

第三天,把程序用gcc把程序都编过去了,但是在链接的时候死活过不去,折腾了半天最后用xlc做链接勉强过去了,但是运行起来发现有异常,收到SIG_BUS信号,暂时未果。

下来学习了一下程序链接的一些常识,又发现一些有用的文章和链接:

Using the GNU C/C++ complier on AIX

Large Open Source Software Archive for AIX

saphires 职场

Work on AIX - day 1

May 12th, 2008

AIX and UNIX 新手入门

AIX toolbox download

靠着上面两个资源,加上IBM System Center的一个技术人员,基本上可以脱离google就搞定一切了。。。一会儿就把AIX玩得像个Linux了。。。-_-

大公司就是大公司,资源就是充足。。。

saphires 职场