Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103363966
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-03-21 17:23:55


最近在一家银行作核心系统,采用的是SCO openServer6.0.0,原来的程序是在SCO openserver5.0.6小编译的,而且是大量的动态链接库.so,遇到的问题真是恶心之极,网上国内外查了个遍,遇到的问题还是不少,但是基本上都没有说到点子上,下面是我遇到的问题及解决方法,希望更多的人参与:
SCO OSR5下的动态库libfun.so,exe.c可执行程序,libfun.so是在SCO5下编译的,直接拷贝到
SCO OSR6下,重新使exe.c链接libfun.so,出现的情况如下:
SCO openserver6.0 编译链接
mk.sh:
cc -c -Kudk q.c -I/usr/tuxedo/include -I/usr/include #生成.o
cc -o a.out -Kosr q.o \
-dy -L./ -Kosr -lfun \
-L/usr/tuxedo/lib -lwsc -lbuft -lwsc  -lnws -lnwi -lnws  -lfml \
-lfml32 -lgp /usr/lib/libcrypt.a  -belf -lnsl -lsocket -L/usr/lib

# sh mk.sh
1.UX:cc: WARNING: -L /usr/lib will likely find the wrong libraries for your 
compilation mode

2.UX:ld: ERROR: libfun.so: cannot link OpenServer object into Intel iABI (UDK 

ABI)
target

       To build using existing OpenServer objects, compile and link using 
-Kosr  option
       Or to convert to UDK ABI, recompile OpenServer sources with (default) 
-Kudk option

这里涉及到SCO6用的编译器,他缺省用的是/usr/ccs/bin/cc,即UNware的编译器,
这样链接不了SCO5的动态库(格式不支持,UDK):ilbfun.so,因此,需要用SCO6支持SCO5动态库的
编译器:/osr5/usr/ccs/bin/cc ,并且加两个参数:-Kosr -f osr,终于编译过了
/osr5/usr/ccs/bin/cc -DSVR4 -c q.c \
-I/usr/tuxedo/include -I/usr/include -I/osr5/usr/include

/osr5/usr/ccs/bin/cc -o a.out q.o \
-belf -f osr -L./ -lfun -f osr \
/usr/lib/libcrypt.a -belf -lnsl \
-L/osr5/usr/lib \
-L/usr/lib -lgen -lm -lc
#-L/usr/tuxedo/lib -ltux -lbuft -ltux2 -lwsc -lnws -lnwi -lfml -lfml32 -lgp -belf

这样就可以了,但是增加了TUXEDO的函数,例如userlog,把下面的链接函数库放开,
就发生了很多找不到的函数,:例如
__stat32 undefineed symbol in libgp.a (libgp.so.60)
但是,根据本人的经验,涉及的问题就比较多了,之前这个在SCO5下都是通过的,
希望有高人能够解决!!!!!
总结:如果是SCO5.0.6的用户,程序移植到SCO6上,个人建议不要重新编译(因为如果用到TUXEDO,
informix,他们的库可能通过不了,他们都是在SCO5下作的,当然要是有源代码的话),
重新编译恐怕会有不可预知的问题,总之SCO6不象想象的那么牛B!
阅读(494) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~