- 论坛徽章:
- 1
|
最近在一家银行作核心系统,采用的是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!
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31/showart_502648.html |
|