最近在一家银行作核心系统,采用的是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! 
(本文已被浏览 2542 次)
|
|